在ASP.NET中,使用AES加密模式时,可以选择多种加密模式。以下是一些常用的AES加密模式:
电子密码本模式(ECB):每个明文块独立加密,不依赖于其他块。这种模式的缺点是容易受到相同的明文块攻击。
密码分组链接模式(CBC):每个明文块与前一个密文块进行异或操作后加密。这种模式需要初始向量(IV),可以增加破解难度。
密码反馈模式(CFB):将前一个密文块与明文块进行异或操作后加密。这种模式可以实时加密数据,适用于流加密。
输出反馈模式(OFB):将前一个密文块与明文块进行异或操作后生成新的密文块。这种模式可以实时加密数据,适用于流加密。
计数器模式(CTR):使用计数器为每个明文块生成唯一的密钥。这种模式可以并行加密,适用于大量数据的加密。
在ASP.NET中,可以使用System.Security.Cryptography
命名空间下的Aes
类来实现AES加密。以下是一个使用CBC模式的示例:
using System;
using System.Security.Cryptography;
using System.Text;
class AesEncryptionExample
{
static void Main()
{
string key = "your-32-byte-key"; // AES-256需要32字节长的密钥
string iv = "your-16-byte-iv"; // AES需要16字节长的初始向量
string plaintext = "Hello, World!";
byte[] encrypted = Encrypt(plaintext, key, iv, CipherMode.CBC);
string decrypted = Decrypt(encrypted, key, iv, CipherMode.CBC);
Console.WriteLine("Plaintext: " + plaintext);
Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted: " + decrypted);
}
static byte[] Encrypt(string plaintext, string key, string iv, CipherMode cipherMode)
{
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
aes.Mode = cipherMode;
aes.Padding = PaddingMode.PKCS7;
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
return encryptor.TransformFinalBlock(Encoding.UTF8.GetBytes(plaintext), 0, plaintext.Length);
}
}
}
static string Decrypt(byte[] ciphertext, string key, string iv, CipherMode cipherMode)
{
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = Encoding.UTF8.GetBytes(iv);
aes.Mode = cipherMode;
aes.Padding = PaddingMode.PKCS7;
using (ICryptoTransform decryptor = aes.CreateDecryptor())
{
return Encoding.UTF8.GetString(decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length));
}
}
}
}
请注意,实际应用中应妥善保管密钥和初始向量,避免泄露。