public static class aesMethod
{
private static readonly byte[] salt = Encoding.Unicode.GetBytes("icecream");
private static readonly int inerations = 2000;
public static string Encrypt(string plainText, string password)
{
byte[] encryptedBytes;
byte[] plainBytes = Encoding.Unicode.GetBytes(plainText);
var aes = Aes.Create();
var pbkdf2 = new Rfc2898DeriveBytes(password, salt, inerations);
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);
}
public static string Decrypt(string cryptoText, string password)
{
byte[] plainBytes;
byte[] crytoBytes = Convert.FromBase64String(cryptoText);
var aes = Aes.Create();
var pbkdf2 = new Rfc2898DeriveBytes(password, salt, inerations);
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(crytoBytes, 0, crytoBytes.Length);
}
plainBytes = ms.ToArray();
}
return Encoding.Unicode.GetString(plainBytes);
}
}
调用例子,可以放在try catch 中
Console.WriteLine("password:");
string strpwd = Console.ReadLine();
Console.WriteLine("明文:");
string strPlain = Console.ReadLine();
string strM = aesMethod.Encrypt(strPlain, strpwd);
Console.WriteLine($"密:{strM}");
Console.WriteLine("password:");
string strpwd2 = Console.ReadLine();
string strMM = aesMethod.Decrypt(strM, strpwd2);
Console.WriteLine($"明:{strMM}");