Exemple #1
0
        /// <summary> 对字符串进行对称加密 </summary>
        public static string SymmetricEncrypt(string inputString, SymmetricFormat symmetricFormat, string key,
                                              string iv)
        {
            var algorithm = GetSymmetricAlgorithm(symmetricFormat);

            var desString = Encoding.UTF8.GetBytes(inputString);

            var desKey = Encoding.ASCII.GetBytes(key);

            var desIv = Encoding.ASCII.GetBytes(iv);

            if (!algorithm.ValidKeySize(desKey.Length * 8))
            {
                throw new ArgumentOutOfRangeException("key");
            }

            if (algorithm.IV.Length != desIv.Length)
            {
                throw new ArgumentOutOfRangeException("iv");
            }

            var mStream = new MemoryStream();

            var cStream = new CryptoStream(mStream, algorithm.CreateEncryptor(desKey, desIv), CryptoStreamMode.Write);

            cStream.Write(desString, 0, desString.Length);

            cStream.FlushFinalBlock();

            cStream.Close();

            return(Convert.ToBase64String(mStream.ToArray()));
        }
Exemple #2
0
        /// <summary> 获取对称加密方法 </summary>
        private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat)
        {
            SymmetricAlgorithm algorithm = null;

            switch (symmetricFormat)
            {
            case SymmetricFormat.DES:
                algorithm = DES.Create();
                break;

            case SymmetricFormat.TripleDES:
                algorithm = TripleDES.Create();
                break;

            case SymmetricFormat.RC2:
                algorithm = RC2.Create();
                break;

            case SymmetricFormat.Rijndael:
                algorithm = Rijndael.Create();
                break;

            case SymmetricFormat.AES:
                algorithm = Aes.Create();
                break;
            }

            return(algorithm);
        }
Exemple #3
0
        /// <summary> 获取对称加密方法 </summary>
        private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat)
        {
            SymmetricAlgorithm algorithm;

            switch (symmetricFormat)
            {
            case SymmetricFormat.DES:
                algorithm = DES.Create();
                break;

            case SymmetricFormat.TripleDES:
                algorithm = TripleDES.Create();
                break;

            case SymmetricFormat.RC2:
                algorithm = RC2.Create();
                break;

            case SymmetricFormat.Rijndael:
                algorithm = Rijndael.Create();
                break;

            case SymmetricFormat.AES:
                algorithm = Aes.Create();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(symmetricFormat), symmetricFormat, null);
            }

            return(algorithm);
        }
Exemple #4
0
        /// <summary> 对字符串进行对称解密 </summary>
        public static string SymmetricDecrypt(string inputString, SymmetricFormat symmetricFormat, string key,
                                              string iv)
        {
            if (string.IsNullOrWhiteSpace(inputString))
            {
                return(inputString);
            }
            inputString = inputString.CleanBase64();
            if (!inputString.IsBase64())
            {
                return(string.Empty);
            }

            var algorithm = GetSymmetricAlgorithm(symmetricFormat);

            var desString = Convert.FromBase64String(inputString);

            var desKey = Encoding.ASCII.GetBytes(key);

            var desIv = Encoding.ASCII.GetBytes(iv);

            var mStream = new MemoryStream();

            var cStream = new CryptoStream(mStream, algorithm.CreateDecryptor(desKey, desIv), CryptoStreamMode.Write);

            cStream.Write(desString, 0, desString.Length);

            cStream.FlushFinalBlock();

            cStream.Close();

            return(Encoding.UTF8.GetString(mStream.ToArray()));
        }
Exemple #5
0
        /// <summary>
        /// 对字符串进行对称解密
        /// </summary>
        public static string SymmetricDecrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv)
        {
            SymmetricAlgorithm algorithm = GetSymmetricAlgorithm(symmetricFormat);

            byte[] desString = Convert.FromBase64String(inputString);

            byte[] desKey = Encoding.ASCII.GetBytes(key);

            byte[] desIV = Encoding.ASCII.GetBytes(iv);

            MemoryStream mStream = new MemoryStream();

            CryptoStream cStream = new CryptoStream(mStream, algorithm.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);

            cStream.Write(desString, 0, desString.Length);

            cStream.FlushFinalBlock();

            cStream.Close();

            return(Encoding.UTF8.GetString(mStream.ToArray()));
        }
Exemple #6
0
        /// <summary>
        /// 获取加密方法
        /// </summary>
        /// <param name="symmetricFormat"></param>
        /// <returns></returns>
        private static SymmetricAlgorithm GetSymmetricAlgorithm(SymmetricFormat symmetricFormat)
        {
            SymmetricAlgorithm algorithm = null;

            switch (symmetricFormat)
            {
                case SymmetricFormat.DES:
                    algorithm = DES.Create();
                    break;

                case SymmetricFormat.TripleDES:
                    algorithm = TripleDES.Create();
                    break;

                case SymmetricFormat.RC2:
                    algorithm = RC2.Create();
                    break;

                case SymmetricFormat.Rijindael:
                    algorithm = Rijndael.Create();
                    break;

                case SymmetricFormat.AES:
                    algorithm = Aes.Create();
                    break;
            }

            return algorithm;
        }
Exemple #7
0
        /// <summary>
        /// 对字符串进行对称加密
        /// </summary>
        /// <param name="inputString"></param>
        /// <param name="symmetricFormat"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string SymmetricEncrypt(string inputString, SymmetricFormat symmetricFormat, string key, string iv)
        {
            SymmetricAlgorithm algorithm = GetSymmetricAlgorithm(symmetricFormat);

            byte[] desString = Encoding.UTF8.GetBytes(inputString);
            byte[] desKey = Encoding.UTF8.GetBytes(key.Substring(0, algorithm.Key.Length));
            byte[] desIV = Encoding.UTF8.GetBytes(iv.Substring(0, algorithm.IV.Length));

            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, algorithm.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
            cStream.Write(desString, 0, desString.Length);
            cStream.FlushFinalBlock();
            cStream.Close();

            return Convert.ToBase64String(mStream.ToArray());
        }