using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace FangYar.Common { /// /// Aes加密帮助类 /// public class AesHelper { //生成字节数组 private static readonly byte[] salt = Encoding.Unicode.GetBytes("7BANANAS"); //迭代次数 应最少设置1000 private static readonly int iterations = 2000; /// /// 加密 /// /// 加密文本 /// 密钥 /// 返回加密后的字节字符串 public static string Encrypt(string plainText, string password = "kndhurlp") { byte[] encryptedBytes; byte[] plainBytes = Encoding.Unicode.GetBytes(plainText); var aes = Aes.Create(); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations); //使用密码 字节数组 和 迭代次数 生成密钥 aes.Key = pbkdf2.GetBytes(32); aes.IV = pbkdf2.GetBytes(16); using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(plainBytes, 0, plainBytes.Length); } encryptedBytes = ms.ToArray(); } return Convert.ToBase64String(encryptedBytes); } /// /// 解密 /// /// 字节文本 /// 密钥:默认:kndhurlp /// 将字节文本解密为字符串返回 public static string Decrypt(string crytoText, string password = "kndhurlp") { byte[] plainBytes; byte[] cryptoBytes = Convert.FromBase64String(crytoText); var aes = Aes.Create(); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, iterations); aes.Key = pbkdf2.GetBytes(32); aes.IV = pbkdf2.GetBytes(16); using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(cryptoBytes, 0, cryptoBytes.Length); } plainBytes = ms.ToArray(); } return Encoding.Unicode.GetString(plainBytes); } } }