c# Aes加解密
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)
c# Aes加解密
/// <summary> /// 加密初始化向量 /// </summary> private static string EnctyptIV { get { return EnctyptKey.Substring(0, 16); } } private static string EnctyptIVAmin { get { return EnctyptKeyAdmin.Substring(0, 16); } } /// <summary> /// 测试 /// </summary> public static void Test() { //加密初始化向量 string message = "abcdefghigklmnopqrstuvwxyz0123456789"; Console.WriteLine("加密前:" + message); message = Encrypt(message, EnctyptKey, EnctyptIV); Console.WriteLine("加密后:" + message); message = Decrypt(message, EnctyptKey, EnctyptIV); Console.WriteLine("解密后:" + message); } /// <summary> /// AES加密 /// </summary> /// <param name="text">明文</param> /// <returns></returns> public static string Encrypt(string text) { return Encrypt(text, EnctyptKey, EnctyptIV); } /// <summary> /// AES加密 /// </summary> /// <param name="text">明文</param> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <returns></returns> public static string Encrypt(string text, string key, string iv) { RijndaelManaged rijndaelManaged = new RijndaelManaged(); rijndaelManaged.Mode = CipherMode.CBC; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.KeySize = 128; rijndaelManaged.BlockSize = 128; byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key); #region 无用代码 //byte[] keyBytes = new byte[16]; //int len = pwdBytes.Length; //if (len > keyBytes.Length) //{ // len = keyBytes.Length; //} //System.Array.Copy(pwdBytes, keyBytes, len); //rijndaelManaged.Key = keyBytes; #endregion 无用代码 rijndaelManaged.Key = pwdBytes; byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv); rijndaelManaged.IV = ivBytes; ICryptoTransform iCryptoTransform = rijndaelManaged.CreateEncryptor(); byte[] textBytes = Encoding.UTF8.GetBytes(text); byte[] targetBytes = iCryptoTransform.TransformFinalBlock(textBytes, 0, textBytes.Length); return Convert.ToBase64String(targetBytes); } /// <summary> /// AES加密 /// </summary> /// <param name="text">明文</param> /// <param name="openEncrypt">是否开启加密</param> /// <returns></returns> public static string TryEncrypt(string text, bool openEncrypt = true) { if (string.IsNullOrEmpty(text)) return text; if (openEncrypt) { return Encrypt(text, EnctyptKey, EnctyptIV); } return text; } public static string TryEncryptAdmin(string text, bool openEncrypt = true) { if (string.IsNullOrEmpty(text)) return text; if (openEncrypt) { return Encrypt(text, EnctyptKeyAdmin, EnctyptIVAmin); } return text; } /// <summary> /// AES解密 /// </summary> /// <param name="text">密文</param> /// <param name="openEncrypt">是否开启加密/解密</param> /// <returns></returns> public static string TryDecrypt(string text, bool openEncrypt = true) { if (string.IsNullOrEmpty(text)) return text; try { if (openEncrypt) { return Decrypt(text, EnctyptKey, EnctyptIV); } } catch (Exception ex) { } return text; } public static string TryDecryptAdmin(string text, bool openEncrypt = true) { if (string.IsNullOrEmpty(text)) return text; try { if (openEncrypt) { return Decrypt(text, EnctyptKeyAdmin, EnctyptIVAmin); } } catch (Exception ex) { } return text; } /// <summary> /// AES解密 /// </summary> /// <param name="text">密文</param> /// <returns></returns> public static string Decrypt(string text) { return Decrypt(text, EnctyptKey, EnctyptIV); } /// <summary> /// AES解密 /// </summary> /// <param name="text">密文</param> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <returns></returns> public static string Decrypt(string text, string key, string iv) { if (string.IsNullOrEmpty(text)) return text; RijndaelManaged rijndaelManaged = new RijndaelManaged(); rijndaelManaged.Mode = CipherMode.CBC; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.KeySize = 128; rijndaelManaged.BlockSize = 128; byte[] encryptedData = Convert.FromBase64String(text); byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key); #region 无用代码 //byte[] keyBytes = new byte[16]; //int len = pwdBytes.Length; //if (len > keyBytes.Length) //{ // len = keyBytes.Length; //} //System.Array.Copy(pwdBytes, keyBytes, len); //rijndaelManaged.Key = keyBytes; #endregion 无用代码 rijndaelManaged.Key = pwdBytes; byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv); rijndaelManaged.IV = ivBytes; ICryptoTransform iCryptoTransform = rijndaelManaged.CreateDecryptor(); byte[] targetBytes = iCryptoTransform.TransformFinalBlock(encryptedData, 0, encryptedData.Length); return Encoding.UTF8.GetString(targetBytes); } }
浙公网安备 33010602011771号