C# AES 加密与解密

AES 算法加密(ECB模式) 将明文加密,加密后进行base64编码,返回密文

        /// <summary>
        /// AES 算法加密(ECB模式) 将明文加密,加密后进行base64编码,返回密文
        /// </summary>
        /// <param name="EncryptStr">明文</param>
        /// <param name="Key">密钥</param>
        /// <returns>加密后base64编码的密文</returns>
        public static string AesEncryptor_Base64(string EncryptStr, string Key)
        {
            try
            {
                //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
                byte[] keyArray = Convert.FromBase64String(Key);
                byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);

                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = keyArray;
                rDel.Mode = CipherMode.ECB;
                rDel.Padding = PaddingMode.PKCS7;

                ICryptoTransform cTransform = rDel.CreateEncryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

                return Convert.ToBase64String(resultArray, 0, resultArray.Length);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

AES 算法解密(ECB模式) 将密文base64解码进行解密,返回明文

        /// <summary>
        /// AES 算法解密(ECB模式) 将密文base64解码进行解密,返回明文
        /// </summary>
        /// <param name="DecryptStr">密文</param>
        /// <param name="Key">密钥</param>
        /// <returns>明文</returns>
        public static string AesDecryptor_Base64(string DecryptStr, string Key)
        {
            try
            {
                //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
                byte[] keyArray = Convert.FromBase64String(Key);
                byte[] toEncryptArray = Convert.FromBase64String(DecryptStr);

                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = keyArray;
                rDel.Mode = CipherMode.ECB;
                rDel.Padding = PaddingMode.PKCS7;

                ICryptoTransform cTransform = rDel.CreateDecryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

                return Encoding.UTF8.GetString(resultArray);//  UTF8Encoding.UTF8.GetString(resultArray);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

AES 算法加密(ECB模式) 将明文加密,加密后进行Hex编码,返回密文

        /// <summary>
        ///AES 算法加密(ECB模式) 将明文加密,加密后进行Hex编码,返回密文
        /// </summary>
        /// <param name="str">明文</param>
        /// <param name="key">密钥</param>
        /// <returns>加密后Hex编码的密文</returns>
        public static string AesEncryptor_Hex(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);

            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = StrToHexByte(key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7
            };

            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return ToHexString(resultArray);
        }

AES 算法解密(ECB模式) 将密文Hex解码后进行解密,返回明文

        /// <summary>
        ///AES 算法解密(ECB模式) 将密文Hex解码后进行解密,返回明文
        /// </summary>
        /// <param name="str">密文</param>
        /// <param name="key">密钥</param>
        /// <returns>明文</returns>
        public static string AesDecryptor_Hex(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = StrToHexByte(str);

            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = StrToHexByte(key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7
            };

            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Encoding.UTF8.GetString(resultArray);
        }

byte数组Hex编码与字符串进行Hex解码(Hex.decodeHex())

        /// <summary>
        /// byte数组Hex编码
        /// </summary>
        /// <param name="bytes">需要进行编码的byte[]</param>
        /// <returns></returns>
        public static string ToHexString(byte[] bytes) // 0xae00cf => "AE00CF "
        {
            string hexString = string.Empty;
            if (bytes != null)
            {
                StringBuilder strB = new StringBuilder();
                for (int i = 0; i < bytes.Length; i++)
                {
                    strB.Append(bytes[i].ToString("X2"));
                }
                hexString = strB.ToString();
            }
            return hexString;
        }
        /// <summary> 
        /// 字符串进行Hex解码(Hex.decodeHex())
        /// </summary> 
        /// <param name="hexString">需要进行解码的字符串</param> 
        /// <returns></returns> 
        public static byte[] StrToHexByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }

AES加密、解密封装

        /// <summary>
        /// 对象转成Json并加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string DataAes(object str)
        {
            string json_str = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(str);
            string miwen = AESCryptos.AesEncryptor_Base64(json_str, key);
            return miwen;
        }

        /// <summary>
        /// 解密并Json解析成对象
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public T JsonToModel<T>(string str)
        {
            string mingwen = AESCryptos.AesDecryptor_Base64(str, key);
            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
            T Model = jss.Deserialize<T>(mingwen);
            return Model;
        }

        /// <summary>
        /// 解密并Json解析成list
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public IList<T> JsonToList<T>(string str)
        {
            string mingwen = AESCryptos.AesDecryptor_Base64(str, key);
            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
            IList<T> list = jss.Deserialize<List<T>>(mingwen);
            return list;
        }

Base64加密

string str= "汉字";
str= Convert.ToBase64String(UnicodeEncoding.UTF8.GetBytes(str));

Base64解密

string str= HttpUtility.UrlDecode(Request["str"], System.Text.Encoding.UTF8).Replace(" ", "+");
str= UnicodeEncoding.UTF8.GetString(Convert.FromBase64String(str));
原文地址:https://www.cnblogs.com/cang12138/p/6688908.html