public class AesHelper { public static string EncryptStringToBase64String_Aes(string plainText, string Key, string IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { return Convert.ToBase64String(EncryptStringToBytes_Aes(plainText, Key, IV, Padding, Mode)); } public static byte[] EncryptStringToBytes_Aes(string plainText, string Key, string IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { return EncryptStringToBytes_Aes(plainText, Encoding.UTF8.GetBytes(Key), Encoding.UTF8.GetBytes(IV), Padding, Mode); } public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { // Check arguments. if (plainText == null || plainText.Length <= 0) throw new ArgumentNullException("plainText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("IV"); byte[] encrypted; // Create an Aes object // with the specified key and IV. using (Aes aesAlg = Aes.Create()) { aesAlg.Key = Key; aesAlg.IV = IV; aesAlg.Padding = Padding; aesAlg.Mode = Mode; // Create an encryptor to perform the stream transform. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for encryption. using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(plainText); } encrypted = msEncrypt.ToArray(); } } } // Return the encrypted bytes from the memory stream. return encrypted; } public static string DecryptStringFromBase64String_Aes(string cipherText, string Key, string IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { return DecryptStringFromString_Aes(Convert.FromBase64String(cipherText), Key, IV, Padding, Mode); } public static string DecryptStringFromString_Aes(byte[] cipherText, string Key, string IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { return DecryptStringFromBytes_Aes(cipherText, Encoding.UTF8.GetBytes(Key), Encoding.UTF8.GetBytes(IV), Padding, Mode); } public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV, PaddingMode Padding = PaddingMode.PKCS7, CipherMode Mode = CipherMode.CBC) { // Check arguments. if (cipherText == null || cipherText.Length <= 0) throw new ArgumentNullException("cipherText"); if (Key == null || Key.Length <= 0) throw new ArgumentNullException("Key"); if (IV == null || IV.Length <= 0) throw new ArgumentNullException("IV"); // Declare the string used to hold // the decrypted text. string plaintext = null; // Create an Aes object // with the specified key and IV. using (Aes aesAlg = Aes.Create()) { aesAlg.Key = Key; aesAlg.IV = IV; aesAlg.Padding = Padding; aesAlg.Mode = Mode; // Create a decryptor to perform the stream transform. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for decryption. using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { // Read the decrypted bytes from the decrypting stream // and place them in a string. plaintext = srDecrypt.ReadToEnd(); } } } } return plaintext; } }
16位密钥对应128位加密
24位密钥对应192位加密
32位密钥对应256位加密