在 C# 中,使用 AES 算法以 CBC 模式进行解密需要提供密钥(Key)和初始化向量(IV)。以下是一个使用 System.Security.Cryptography
命名空间中的类实现 AES CBC 模式解密的基本示例。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class AesCbcDecryptor
string plaintext = null;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
byte[] myKey = Encoding.UTF8.GetBytes("YourKeyHere___16Bytes"); // 密钥 (16, 24 或 32 字节)
byte[] myIV = Encoding.UTF8.GetBytes("YourIVHere__16Bytes"); // 初始化向量 (16 字节)
byte[] cipherText = Convert.FromBase64String("YourEncryptedText"); // 加密文本(字节数组)
string decryptedText = AesCbcDecryptor.DecryptStringFromBytes_Aes(cipherText, myKey, myIV);Key
和 IV
的长度符合 AES 的要求。AES 支持 128 位(16 字节)、192 位(24 字节)和 256 位(32 字节)长的密钥,而 IV 总是 128 位(16 字节)长。PaddingMode.PKCS7
是解密时使用的填充模式,它应与加密时使用的填充模式一致。Key
或 IV
会导致解密失败,可能会抛出异常,例如 CryptographicException
。Aes
类是 IDisposable 的,所以使用 using
语句确保资源被正确释放。在使用此代码进行 AES CBC 模式解密时,请确保你理解所涉及的密码学原理,以及在实际应用中涉及的安全考虑。