コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }