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);
- }
转载于:https://blog.51cto.com/linzheng/1078718