赞
踩
需要密钥(自定义)
密钥支持 (16字节) 128位 、(24字节)192位 、(32字节)256位
/// <summary> /// Aes加密-ECB模式 /// </summary> /// <param name="encryString">待加密字符</param> /// <param name="secretKey">密钥</param> public void EncryptionECB(string encryString, string secretKey) { //加密后的字节数组 byte[] encryByte; using (Aes aes = Aes.Create()) { //密钥 aes.Key = Encoding.UTF8.GetBytes(secretKey); //加密模式 aes.Mode = CipherMode.ECB; //填充模式 aes.Padding = PaddingMode.PKCS7; //加密器 ICryptoTransform encryptor = aes.CreateEncryptor(); //创建内存流 using (MemoryStream memoryStream = new MemoryStream()) { //创建加密流(存储在内存流中) using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { //将待加密字符写入加密流进行加密 using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(encryString); } } encryByte = memoryStream.ToArray(); } } // 编码为Base64字符串 string base64String = Convert.ToBase64String(encryByte); Console.WriteLine("\n加密:" + base64String); }
/// <summary> /// Aes解密-ECB模式 /// </summary> /// <param name="decryString">待解密字符</param> /// <param name="secretKey">密钥</param> public void DecryptionECB(string decryString, string secretKey) { string str = string.Empty; using (Aes aes = Aes.Create()) { //密钥 aes.Key = Encoding.UTF8.GetBytes(secretKey); //加密模式 aes.Mode = CipherMode.ECB; //填充模式 aes.Padding = PaddingMode.PKCS7; //解密器 ICryptoTransform decryptor = aes.CreateDecryptor(); //密文 byte[] encryByte = Convert.FromBase64String(decryString); //创建内存流 using (MemoryStream memoryStream = new MemoryStream(encryByte)) { //创建解密流 using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) { using (StreamReader streamReader = new StreamReader(cryptoStream)) { str = streamReader.ReadToEnd(); } } } } Console.WriteLine("\n解密:" + str); }
需要密钥及向量IV(自定义) ;
密钥支持 (16字节) 128位 、(24字节)192位 、(32字节)256位
向量IV支持(16字节) 128位
/// <summary> /// Aes加密-CBC模式 /// </summary> /// <param name="encryString">待加密字符</param> /// <param name="secretKey">密钥</param> /// <param name="iv">初始化向量</param> public void EncryptionCBC(string encryString, string secretKey, string iv) { //加密后的字节数组 byte[] encryByte; //(Create时,IV会调用GenerateIV()初始化成随机数,Key会调用GenerateKey()初始化成随机数) using (Aes aes = Aes.Create()) { //密钥 aes.Key = Encoding.UTF8.GetBytes(secretKey); //加密模式 aes.Mode = CipherMode.CBC; //填充模式 aes.Padding = PaddingMode.PKCS7; //设置向量 aes.IV = Encoding.UTF8.GetBytes(iv); //加密器 ICryptoTransform encryptor = aes.CreateEncryptor(); //创建内存流 using (MemoryStream memoryStream = new MemoryStream()) { //创建加密流(存储在内存流中) using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { //将待加密字符写入加密流进行加密 using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(encryString); } } encryByte = memoryStream.ToArray(); } } // 编码为Base64字符串 string base64String = Convert.ToBase64String(encryByte); Console.WriteLine("\n加密:" + base64String); }
/// <summary> /// Aes解密-CBC模式 /// </summary> /// <param name="decryString">待解密字符</param> /// <param name="secretKey">密钥</param> /// <param name="iv">初始化向量</param> public void DecryptionCBC(string decryString, string secretKey, string iv) { string str = string.Empty; //(Create时,IV会调用GenerateIV()初始化成随机数,Key会调用GenerateKey()初始化成随机数) using (Aes aes = Aes.Create()) { //密钥 aes.Key = Encoding.UTF8.GetBytes(secretKey); //加密模式 aes.Mode = CipherMode.CBC; //填充模式 aes.Padding = PaddingMode.PKCS7; //设置向量 aes.IV = Encoding.UTF8.GetBytes(iv); //解密器 ICryptoTransform decryptor = aes.CreateDecryptor(); //密文 byte[] encryByte = Convert.FromBase64String(decryString); //创建内存流 using (MemoryStream memoryStream = new MemoryStream(encryByte)) { //创建解密流 using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) { using (StreamReader streamReader = new StreamReader(cryptoStream)) { str = streamReader.ReadToEnd(); } } } } Console.WriteLine("\n解密:" + str); }
在CBC模式中,每次加密均使用不同向量,可以让相同的内容加密后密文不同
注意:解密时的向量和密钥必须和加密时一致
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。