public string Decrypt(string secureString) { string result = null; try { byte[] secureBytes = Convert.FromBase64String(secureString); uint saltBytesCount = 0; uint initiaVectorBytesCount = 0; SecureHead.DecodeByteCounts(secureBytes, 0, out saltBytesCount, out initiaVectorBytesCount); SecureHead secureHead = SecureHead.Decode( secureBytes, 2 * sizeof(uint), saltBytesCount, initiaVectorBytesCount); byte[] plainBytes = Decrypt(secureBytes, secureHead.TotalBytesCount, secureHead.SecureBytesCount, secureHead); if (plainBytes != null) { result = BytesHelper.GetUTF8String(plainBytes, 0, (uint)plainBytes.Length); } } catch (Exception e) { //ignore all exceptions according to requirements } return(result); }
public static SecureHead Decode(byte[] bytes, uint offset, uint saltBytesCount, uint initiaVectorBytesCount) { uint totalBytesCount = GetPart2BytesCount() + saltBytesCount + initiaVectorBytesCount; if (BytesHelper.IsNullOrEmptyArray(bytes) == true || bytes.Length - offset < totalBytesCount) { throw new ArgumentException( string.Format("bytes array should have {0} bytes at least.", totalBytesCount)); } //part 2 (4 uints): uint beginIndex = offset; uint length = sizeof(uint); uint saltIterations = BytesHelper.GetUInt32(bytes, beginIndex); beginIndex += length; length = sizeof(uint); uint saltedInitiaVectorBytesCount = BytesHelper.GetUInt32(bytes, beginIndex); beginIndex += length; length = sizeof(uint); uint saltedPasswordBytesCount = BytesHelper.GetUInt32(bytes, beginIndex); beginIndex += length; length = sizeof(uint); uint secureDataBytes = BytesHelper.GetUInt32(bytes, beginIndex); //part 3 (2 byte arraries): beginIndex += length; length = saltBytesCount; string salt = BytesHelper.GetUTF8String(bytes, beginIndex, length); beginIndex += length; length = initiaVectorBytesCount; string initiaVector = BytesHelper.GetUTF8String(bytes, beginIndex, length); return(new SecureHead( salt, initiaVector, saltIterations, saltedInitiaVectorBytesCount, saltedPasswordBytesCount, secureDataBytes)); }