在ASP.NET中,使用AES加密时,可以选择不同的填充方式。常见的填充方式有PKCS7、ISO10126和NoPadding。下面是一个使用AES加密和解密的示例,展示了如何使用不同的填充方式。
首先,确保已经安装了System.Security.Cryptography命名空间。
using System;
using System.Text;
using System.Security.Cryptography;
接下来,我们创建一个加密和解密的方法,分别使用PKCS7、ISO10126和NoPadding填充方式。
public static string Encrypt(string plainText, string key, string iv, PaddingMode paddingMode)
{
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
aes.Mode = CipherMode.CBC;
aes.Padding = paddingMode;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
return Convert.ToBase64String(encryptedBytes);
}
}
public static string Decrypt(string cipherText, string key, string iv, PaddingMode paddingMode)
{
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
aes.Mode = CipherMode.CBC;
aes.Padding = paddingMode;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
byte[] encryptedBytes = Convert.FromBase64String(cipherText);
byte[] decryptedBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
return Encoding.UTF8.GetString(decryptedBytes);
}
}
现在,我们可以使用这些方法来加密和解密字符串。
string plainText = "Hello, World!";
string key = "abcdefghijklmnop";
string iv = "1234567890abcdef";
// 使用PKCS7填充方式加密
string encryptedTextPkcs7 = Encrypt(plainText, key, iv, PaddingMode.PKCS7);
Console.WriteLine("Encrypted text (PKCS7): " + encryptedTextPkcs7);
// 使用ISO10126填充方式加密
string encryptedTextIso10126 = Encrypt(plainText, key, iv, PaddingMode.ISO10126);
Console.WriteLine("Encrypted text (ISO10126): " + encryptedTextIso10126);
// 使用NoPadding填充方式加密
string encryptedTextNoPadding = Encrypt(plainText, key, iv, PaddingMode.NoPadding);
Console.WriteLine("Encrypted text (NoPadding): " + encryptedTextNoPadding);
// 使用PKCS7填充方式解密
string decryptedTextPkcs7 = Decrypt(encryptedTextPkcs7, key, iv, PaddingMode.PKCS7);
Console.WriteLine("Decrypted text (PKCS7): " + decryptedTextPkcs7);
// 使用ISO10126填充方式解密
string decryptedTextIso10126 = Decrypt(encryptedTextIso10126, key, iv, PaddingMode.ISO10126);
Console.WriteLine("Decrypted text (ISO10126): " + decryptedTextIso10126);
// 使用NoPadding填充方式解密
string decryptedTextNoPadding = Decrypt(encryptedTextNoPadding, key, iv, PaddingMode.NoPadding);
Console.WriteLine("Decrypted text (NoPadding): " + decryptedTextNoPadding);
请注意,加密和解密时使用的密钥(key)和初始化向量(iv)应该是相同的。在实际应用中,请确保妥善保管这些密钥和向量。