AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。
需要加入引用 using System.Security.Cryptography;
- /// <summary>
- /// 有密码的AES加密
-
/// </summary>
-
/// <param name="text">加密字符</param>
-
/// <param name="password">加密的密码</param>
-
/// <param name="iv">密钥</param>
-
/// <returns></returns>
- public static string AESEncrypt(string text, string password, string iv)
- {
-
RijndaelManaged rijndaelCipher = new RijndaelManaged();
-
-
rijndaelCipher.Mode = CipherMode.CBC;
-
-
rijndaelCipher.Padding = PaddingMode.PKCS7;
-
-
rijndaelCipher.KeySize = 128;
-
-
rijndaelCipher.BlockSize = 128;
-
-
byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
-
-
byte[] keyBytes = new byte[16];
-
-
int len = pwdBytes.Length;
-
-
if (len > keyBytes.Length) len = keyBytes.Length;
-
- System.Array.Copy(pwdBytes, keyBytes, len);
-
-
rijndaelCipher.Key = keyBytes;
-
-
-
byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
-
rijndaelCipher.IV = ivBytes;
-
-
ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
-
-
byte[] plainText = Encoding.UTF8.GetBytes(text);
-
-
byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length);
-
- return Convert.ToBase64String(cipherBytes);
-
- }
-
-
/// <summary>
- /// 随机生成密钥
-
/// </summary>
-
/// <returns></returns>
- public static string GetIv(int n)
- {
-
char[] arrChar = new char[]{
- 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
- '0','1','2','3','4','5','6','7','8','9',
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
- };
-
-
StringBuilder num = new StringBuilder();
-
-
Random rnd = new Random(DateTime.Now.Millisecond);
-
for (int i = 0; i < n; i++)
- {
- num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());
-
- }
-
- return num.ToString();
- }
-
-
/// <summary>
- /// AES解密
-
/// </summary>
-
/// <param name="text"></param>
-
/// <param name="password"></param>
-
/// <param name="iv"></param>
-
/// <returns></returns>
- public static string AESDecrypt(string text, string password, string iv)
- {
-
RijndaelManaged rijndaelCipher = new RijndaelManaged();
-
-
rijndaelCipher.Mode = CipherMode.CBC;
-
-
rijndaelCipher.Padding = PaddingMode.PKCS7;
-
-
rijndaelCipher.KeySize = 128;
-
-
rijndaelCipher.BlockSize = 128;
-
-
byte[] encryptedData = Convert.FromBase64String(text);
-
-
byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(password);
-
-
byte[] keyBytes = new byte[16];
-
-
int len = pwdBytes.Length;
-
-
if (len > keyBytes.Length) len = keyBytes.Length;
-
- System.Array.Copy(pwdBytes, keyBytes, len);
-
-
rijndaelCipher.Key = keyBytes;
-
-
byte[] ivBytes = System.Text.Encoding.UTF8.GetBytes(iv);
-
rijndaelCipher.IV = ivBytes;
-
-
ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
-
-
byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
-
- return Encoding.UTF8.GetString(plainText);
-
- }
本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078718