Esempio n. 1
0
        /// <summary>将某种格式的密文转为加密后的二进制数据</summary>
        /// <param name="ciphertext">密文</param>
        /// <param name="format">密文格式</param>
        /// <returns>加密后的二进制数据</returns>
        public static byte[] FromCiphertext(string ciphertext, CiphertextFormat format)
        {
            byte[] result = null;

            if (format == CiphertextFormat.Base64String)
            {
                result = Convert.FromBase64String(ciphertext);
            }
            else if (format == CiphertextFormat.HexString)
            {
                string[] data = ciphertext.Split('-');

                result = new byte[data.Length];

                Int32Converter converter = new Int32Converter();

                for (int i = 0; i < data.Length; i++)
                {
                    result[i] = Convert.ToByte(converter.ConvertFromInvariantString(string.Format("0x{0}", data[i])).ToString());
                }
            }
            else if (format == CiphertextFormat.HexStringWhitoutHyphen)
            {
                result = new byte[ciphertext.Length / 2];

                Int32Converter converter = new Int32Converter();

                for (int i = 0; i < ciphertext.Length; i = i + 2)
                {
                    result[i / 2] = Convert.ToByte(converter.ConvertFromInvariantString(string.Format("0x{0}", ciphertext.Substring(i, 2)).ToString()));
                }
            }

            return(result);
        }
Esempio n. 2
0
        public static string Decrypt(EncryptionAlgorithm algorithm, CiphertextFormat format, string data, Key key,
                                     byte[] salt, byte[] iv, PaddingMode paddingMode)
        {
            var _d = new byte[0];

            switch (format)
            {
            case CiphertextFormat.Base64:
            {
                _d = Convert.FromBase64String(data);
                break;
            }

            case CiphertextFormat.Hex:
            {
                _d = HexToByteArray(data);
                break;
            }

            case CiphertextFormat.Url:
            {
                var encoding = new UTF8Encoding();
                _d = encoding.GetBytes(HttpUtility.UrlDecode(data));
                break;
            }
            }
            return(Decrypt(algorithm, _d, key, salt, iv, paddingMode));
        }
Esempio n. 3
0
 public static string Decrypt(EncryptionAlgorithm algorithm, CiphertextFormat format, string data, Key key,
     byte[] salt, byte[] iv, PaddingMode paddingMode)
 {
     var _d = new byte[0];
     switch (format)
     {
         case CiphertextFormat.Base64:
         {
             _d = Convert.FromBase64String(data);
             break;
         }
         case CiphertextFormat.Hex:
         {
             _d = HexToByteArray(data);
             break;
         }
         case CiphertextFormat.Url:
         {
             var encoding = new UTF8Encoding();
             _d = encoding.GetBytes(HttpUtility.UrlDecode(data));
             break;
         }
     }
     return Decrypt(algorithm, _d, key, salt, iv, paddingMode);
 }
Esempio n. 4
0
        /// <summary>解密-AES方式</summary>
        /// <param name="text">文本</param>
        /// <param name="key">密钥</param>
        /// <param name="iv">初始化向量</param>
        /// <returns>解密后的文本</returns>
        public static string DecryptAES(string text, byte[] key, byte[] iv, CiphertextFormat format)
        {
            var mode    = (CipherMode)Enum.Parse(typeof(CipherMode), SecurityConfigurationView.Instance.AESCryptoMode);
            var padding = (PaddingMode)Enum.Parse(typeof(PaddingMode), SecurityConfigurationView.Instance.AESCryptoPadding);

            return(DecryptAES(text, key, iv, mode, padding, format));
        }
Esempio n. 5
0
        /// <summary>加密-SHA1方式</summary>
        /// <param name="text">文本</param>
        /// <param name="format">密文格式</param>
        /// <returns>加密后的文本</returns>
        public static string EncryptSHA1(string text, CiphertextFormat format)
        {
            SHA1 sha1 = new SHA1CryptoServiceProvider();

            byte[] result = sha1.ComputeHash(Encoding.UTF8.GetBytes(text));

            return(ToCiphertext(result, format));
        }
Esempio n. 6
0
        /// <summary>加密-MD5方式</summary>
        /// <param name="text">文本</param>
        /// <param name="format">密文格式</param>
        /// <returns>加密后的文本</returns>
        public static string EncryptMD5(string text, CiphertextFormat format)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            byte[] result = md5.ComputeHash(Encoding.UTF8.GetBytes(text));

            return(ToCiphertext(result, format));
        }
Esempio n. 7
0
        /// <summary>解密-DES方式</summary>
        /// <param name="text">文本</param>
        /// <param name="rgbKey">Key</param>
        /// <param name="rgbIV">初始化向量</param>
        /// <returns></returns>
        public static string DecryptDES(string text, byte[] rgbKey, byte[] rgbIV, CiphertextFormat format)
        {
            byte[] result = null;

            byte[] buffer = FromCiphertext(text, format);

            DESCryptoServiceProvider desCryptoProvider = new DESCryptoServiceProvider();

            using (ICryptoTransform decryptor = desCryptoProvider.CreateDecryptor(rgbKey, rgbIV))
            {
                result = decryptor.TransformFinalBlock(buffer, 0, buffer.Length);
            }

            return(UTF8Encoding.UTF8.GetString(result));
        }
Esempio n. 8
0
        /// <summary>加密-DES方式</summary>
        /// <param name="text">文本</param>
        /// <param name="rgbKey">加密的Key</param>
        /// <param name="rgbIV">初始化向量</param>
        /// <returns>加密后的文本</returns>
        public static string EncryptDES(string text, byte[] rgbKey, byte[] rgbIV, CiphertextFormat format)
        {
            byte[] result = null;

            byte[] buffer = UTF8Encoding.UTF8.GetBytes(text);

            DESCryptoServiceProvider desCryptoProvider = new DESCryptoServiceProvider();

            using (ICryptoTransform encryptor = desCryptoProvider.CreateEncryptor(rgbKey, rgbIV))
            {
                result = encryptor.TransformFinalBlock(buffer, 0, buffer.Length);
                encryptor.Dispose();
            }

            return(ToCiphertext(result, format));
        }
Esempio n. 9
0
        /// <summary>将加密后的二进制数据转为某种格式的文本信息</summary>
        /// <param name="result">加密后的二进制结果数据</param>
        /// <param name="format">密文格式</param>
        /// <returns>格式化后的的加密文本</returns>
        public static string ToCiphertext(byte[] result, CiphertextFormat format)
        {
            switch (format)
            {
            case CiphertextFormat.Base64String:
                return(Convert.ToBase64String(result, 0, result.Length));

            case CiphertextFormat.HexString:
                return(BitConverter.ToString(result).ToLower());

            case CiphertextFormat.HexStringWhitoutHyphen:
                return(BitConverter.ToString(result).Replace("-", string.Empty).ToLower());

            default:
                return(string.Empty);
            }
        }
Esempio n. 10
0
            public Key(string s, CiphertextFormat format)
            {
                switch (format)
                {
                case CiphertextFormat.Hex:
                {
                    GenerateFromHex(s);
                    break;
                }

                case CiphertextFormat.Base64:
                {
                    GenerateFromBase64(s);
                    break;
                }
                }
            }
Esempio n. 11
0
        /// <summary>
        ///     Use AES to encrypt data string. The output string is the encrypted bytes as a base64 string.
        ///     The same password must be used to decrypt the string.
        /// </summary>
        /// <param name="data">Clear string to encrypt.</param>
        /// <param name="password">Password used to encrypt the string.</param>
        /// <param name="format">Output string format.</param>
        /// <returns>Encrypted result as Base64 string.</returns>
        public static string EncryptData(string data, string password, CiphertextFormat format)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (password == null)
            {
                throw new ArgumentNullException("password");
            }
            var encBytes = EncryptData(Encoding.UTF8.GetBytes(data), password, PaddingMode.ISO10126);

            if (format == CiphertextFormat.Hex)
            {
                return(BitConverter.ToString(encBytes).Replace("-", ""));
            }
            return(format == CiphertextFormat.Base64 ? Convert.ToBase64String(encBytes) : encBytes.ToString());
        }
Esempio n. 12
0
        public static string Encrypt(EncryptionAlgorithm algorithm, CiphertextFormat format, string data, Key key,
                                     byte[] salt, byte[] iv, PaddingMode paddingMode)
        {
            var _data = Encoding.UTF8.GetBytes(data);

            switch (format)
            {
            case CiphertextFormat.Base64:
            {
                return(Convert.ToBase64String(Encrypt(algorithm, _data, key, salt, iv, paddingMode)));
            }

            case CiphertextFormat.Hex:
            {
                return(BitConverter.ToString(Encrypt(algorithm, _data, key, salt, iv, paddingMode)).Replace("-", ""));
            }

            case CiphertextFormat.Url:
            {
                return(HttpUtility.UrlEncode(Encrypt(algorithm, _data, key, salt, iv, paddingMode)));
            }
            }
            return(string.Empty);
        }
Esempio n. 13
0
        /// <summary>
        ///     Decrypt the data string to the original string.  The data must be the base64 string
        ///     returned from the EncryptData method.
        /// </summary>
        /// <param name="data">Encrypted data generated from EncryptData method.</param>
        /// <param name="password">Password used to decrypt the string.</param>
        /// <returns>Decrypted string.</returns>
        public static string DecryptData(string data, string password, CiphertextFormat format)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (password == null)
            {
                throw new ArgumentNullException("password");
            }
            var encBytes = new byte[0];

            if (format == CiphertextFormat.Base64)
            {
                encBytes = Convert.FromBase64String(data);
            }
            if (format == CiphertextFormat.Hex)
            {
                encBytes = HexToByteArray(data);
            }
            var decBytes = DecryptData(encBytes, password, PaddingMode.ISO10126);

            return(Encoding.UTF8.GetString(decBytes));
        }
Esempio n. 14
0
 public Key(string s, CiphertextFormat format)
 {
     switch (format)
     {
         case CiphertextFormat.Hex:
         {
             GenerateFromHex(s);
             break;
         }
         case CiphertextFormat.Base64:
         {
             GenerateFromBase64(s);
             break;
         }
     }
 }
Esempio n. 15
0
 /// <summary>
 ///     Use AES to encrypt data string. The output string is the encrypted bytes as a base64 string.
 ///     The same password must be used to decrypt the string.
 /// </summary>
 /// <param name="data">Clear string to encrypt.</param>
 /// <param name="password">Password used to encrypt the string.</param>
 /// <param name="format">Output string format.</param>
 /// <returns>Encrypted result as Base64 string.</returns>
 public static string EncryptData(string data, string password, CiphertextFormat format)
 {
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     if (password == null)
     {
         throw new ArgumentNullException("password");
     }
     var encBytes = EncryptData(Encoding.UTF8.GetBytes(data), password, PaddingMode.ISO10126);
     if (format == CiphertextFormat.Hex)
     {
         return BitConverter.ToString(encBytes).Replace("-", "");
     }
     return format == CiphertextFormat.Base64 ? Convert.ToBase64String(encBytes) : encBytes.ToString();
 }
Esempio n. 16
0
 /// <summary>加密-AES方式</summary>
 /// <param name="text">文本</param>
 /// <param name="key">密钥</param>
 /// <param name="iv">初始化向量</param>
 /// <param name="format">密文格式</param>
 /// <returns>加密后的文本</returns>
 public static string EncryptAES(string text, string key, string iv, CiphertextFormat format)
 {
     return(EncryptAES(text, UTF8Encoding.UTF8.GetBytes(key), UTF8Encoding.UTF8.GetBytes(iv), format));
 }
Esempio n. 17
0
 public static string Encrypt(EncryptionAlgorithm algorithm, CiphertextFormat format, string data, Key key,
     byte[] salt, byte[] iv, PaddingMode paddingMode)
 {
     var _data = Encoding.UTF8.GetBytes(data);
     switch (format)
     {
         case CiphertextFormat.Base64:
         {
             return Convert.ToBase64String(Encrypt(algorithm, _data, key, salt, iv, paddingMode));
         }
         case CiphertextFormat.Hex:
         {
             return BitConverter.ToString(Encrypt(algorithm, _data, key, salt, iv, paddingMode)).Replace("-", "");
         }
         case CiphertextFormat.Url:
         {
             return HttpUtility.UrlEncode(Encrypt(algorithm, _data, key, salt, iv, paddingMode));
         }
     }
     return string.Empty;
 }
Esempio n. 18
0
 /// <summary>
 ///     Decrypt the data string to the original string.  The data must be the base64 string
 ///     returned from the EncryptData method.
 /// </summary>
 /// <param name="data">Encrypted data generated from EncryptData method.</param>
 /// <param name="password">Password used to decrypt the string.</param>
 /// <returns>Decrypted string.</returns>
 public static string DecryptData(string data, string password, CiphertextFormat format)
 {
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     if (password == null)
     {
         throw new ArgumentNullException("password");
     }
     var encBytes = new byte[0];
     if (format == CiphertextFormat.Base64)
     {
         encBytes = Convert.FromBase64String(data);
     }
     if (format == CiphertextFormat.Hex)
     {
         encBytes = HexToByteArray(data);
     }
     var decBytes = DecryptData(encBytes, password, PaddingMode.ISO10126);
     return Encoding.UTF8.GetString(decBytes);
 }
Esempio n. 19
0
 /// <summary>解密-AES方式</summary>
 /// <param name="text">文本</param>
 /// <param name="key">密钥</param>
 /// <param name="iv">初始化向量</param>
 /// <returns>解密后的文本</returns>
 public static string DecryptAES(string text, string key, string iv, CipherMode mode, PaddingMode padding, CiphertextFormat format)
 {
     return(DecryptAES(text, UTF8Encoding.UTF8.GetBytes(key), UTF8Encoding.UTF8.GetBytes(iv), mode, padding, format));
 }
Esempio n. 20
0
        /// <summary>解密-AES方式</summary>
        /// <param name="text">文本</param>
        /// <param name="key">密钥</param>
        /// <param name="iv">初始化向量</param>
        /// <returns>解密后的文本</returns>
        public static string DecryptAES(string text, byte[] key, byte[] iv, CipherMode mode, PaddingMode padding, CiphertextFormat format)
        {
            byte[] result = null;

            byte[] buffer = FromCiphertext(text, format);

            RijndaelManaged rijndaelManaged = new RijndaelManaged();

            rijndaelManaged.Key     = key;
            rijndaelManaged.IV      = iv;
            rijndaelManaged.Mode    = mode;
            rijndaelManaged.Padding = padding;

            using (ICryptoTransform cTransform = rijndaelManaged.CreateDecryptor())
            {
                result = cTransform.TransformFinalBlock(buffer, 0, buffer.Length);
            }

            return(UTF8Encoding.UTF8.GetString(result));
        }