AESRijndael加密

    /// <summary>
    /// AESRijndael
    /// </summary>
    public class AESRijndael
    {
        /// <summary>
        /// 检验密钥是否有效长度【16|24|32】
        /// </summary>
        /// <param name="key">密钥</param>
        /// <returns>bool</returns>
        public static bool CheckRijndaelKey(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
                return false;
            if (16.Equals(key.Length) || 24.Equals(key.Length) || 32.Equals(key.Length))
                return true;
            else
                return false;
        }

        /// <summary>
        /// 检验向量是否有效长度【16】
        /// </summary>
        /// <param name="iv">向量</param>
        /// <returns>bool</returns>
        public static bool CheckRijndaelIV(string iv)
        {
            if (string.IsNullOrWhiteSpace(iv))
                return false;
            if (16.Equals(iv.Length))
                return true;
            else
                return false;
        }

        /// <summary>
        /// Rijndael加密
        /// </summary>
        /// <param name="data">被加密的明文</param>
        /// <param name="dataEncoding">要加密字符串加载时编码方式</param>  
        /// <param name="key">密钥</param>
        /// <param name="vector">向量</param> 
        /// <param name="cipherMode">对称算法的运算模式</param>  
        /// <param name="paddingMode">对称算法中使用的填充模式</param>  
        /// <returns>返回Base64String密文</returns>
        public static string RijndaelEncrypt(string data, Encoding dataEncoding, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7)
        {
            return RijndaelEncrypt(dataEncoding.GetBytes(data), key, vector, cipherMode, paddingMode);
        }

        /// <summary>
        /// Rijndael加密
        /// </summary>
        /// <param name="dataBytes">被加密的明文</param>
        /// <param name="key">密钥</param>
        /// <param name="vector">向量</param> 
        /// <param name="cipherMode">对称算法的运算模式</param>  
        /// <param name="paddingMode">对称算法中使用的填充模式</param>  
        /// <returns>返回Base64String密文</returns>
        public static string RijndaelEncrypt(byte[] dataBytes, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7)
        {
            byte[] cryptoBytes = null;
            try
            {
                using (RijndaelManaged aes = new RijndaelManaged())
                {
                    aes.Key = Encoding.UTF8.GetBytes(key);
                    aes.IV = Encoding.UTF8.GetBytes(vector);
                    aes.Mode = cipherMode;
                    aes.Padding = paddingMode;
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(dataBytes, 0, dataBytes.Length);
                            cs.FlushFinalBlock();

                            cryptoBytes = ms.ToArray();
                        }
                    }
                }
            }
            catch
            {
                cryptoBytes = null;
            }
            return Convert.ToBase64String(cryptoBytes);
        }


        /// <summary>
        /// Rijndael解密
        /// </summary>
        /// <param name="data">被解密的密文</param>
        /// <param name="dataEncoding">解密字符串返回的编码方式</param>  
        /// <param name="key">密钥</param>
        /// <param name="vector">向量</param> 
        /// <param name="cipherMode">对称算法的运算模式</param>  
        /// <returns>返回指定编码明文</returns>
        public static string RijndaelDecrypt(string data, Encoding dataEncoding, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7)
        {
            return dataEncoding.GetString(RijndaelDecrypt(data, key, vector, cipherMode, paddingMode));
        }

        /// <summary>
        /// Rijndael解密
        /// </summary>
        /// <param name="data">被解密的密文</param>
        /// <param name="key">密钥</param>
        /// <param name="vector">向量</param> 
        /// <param name="cipherMode">对称算法的运算模式</param>  
        /// <param name="paddingMode">对称算法中使用的填充模式</param> 
        /// <returns>返回指定编码明文</returns>
        public static byte[] RijndaelDecrypt(string data, string key, string vector, CipherMode cipherMode = CipherMode.CBC, PaddingMode paddingMode = PaddingMode.PKCS7)
        {
            byte[] dataBytes = Convert.FromBase64String(data);
            byte[] cryptoBytes = null;
            try
            {
                using (RijndaelManaged aes = new RijndaelManaged())
                {
                    aes.Key = Encoding.UTF8.GetBytes(key);
                    aes.IV = Encoding.UTF8.GetBytes(vector);
                    aes.Mode = cipherMode;
                    aes.Padding = paddingMode;
                    using (MemoryStream ms = new MemoryStream(dataBytes))
                    {
                        using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read))
                        {
                            using (MemoryStream originalMemory = new MemoryStream())
                            {
                                byte[] bufferBytes = new byte[1024];
                                int bytesRead = 0;
                                while ((bytesRead = cs.Read(bufferBytes, 0, bufferBytes.Length)) > 0)
                                {
                                    originalMemory.Write(bufferBytes, 0, bytesRead);
                                }
                                cryptoBytes = originalMemory.ToArray();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                cryptoBytes = null;
            }
            return cryptoBytes;
        }

    }
原文地址:https://www.cnblogs.com/tlmbem/p/10800751.html