C#中AES加密解密应使用Aes类,密钥长128/192/256位,IV为16字节且每次随机生成并前置密文;推荐CBC或GCM模式,填充用PKCS7;密钥宜用PBKDF2派生;避免ECB、重复IV、硬编码密钥。

在C#中使用AES进行对称加密解密,核心是借助Aes类(位于System.Security.Cryptography命名空间),配合合适的密钥、向量(IV)、填充模式和操作模式。它安全、高效,是.NET推荐的默认对称加密方案。
AES基础参数设置要点
AES要求密钥长度为128、192或256位(即16、24、32字节),常用256位;初始化向量IV必须为128位(16字节),且每次加密应随机生成、与密文一同传输(但无需保密);推荐使用CBC模式(需IV)或更现代的GCM模式(支持认证加密);填充方式一般用PKCS7(.NET默认)。
标准AES-CBC加解密实现(含IV处理)
以下是一个安全、可直接使用的封装示例,自动随机生成IV并将其前置到密文头部:
- 加密时:生成随机IV → 用IV+密钥加密明文 → 将IV拼接在密文前(共16字节+密文)→ Base64编码返回
- 解密时:从Base64解码 → 提取前16字节为IV → 剩余为密文 → 用同一密钥和该IV解密
- 密钥建议通过
Rfc2898DeriveBytes(PBKDF2)从口令派生,避免硬编码原始字节数组
使用AesGcm实现带认证的加密(.NET Core 3.0+ / .NET 5+)
若项目支持较新运行时,优先选AesGcm——它内置完整性校验,防止密文被篡改:
- 需要12字节随机Nonce(类似IV)、16字节Tag(认证标签)
- 加密输出 = 密文 + Tag(Nonce由调用方保管,不嵌入输出)
- 解密时必须传入相同Nonce和收到的Tag,验证失败会直接抛异常
- 无需手动处理填充,更简洁且更安全
注意事项与常见坑
别用ECB模式(不安全);别重复使用同一IV+密钥加密多条数据;别把密钥写死在代码里;解密时确保编码一致(如UTF-8);.NET Framework 4.7.2+ 和所有新版.NET都内置Aes,无需额外NuGet包。
基本上就这些。只要管好密钥、IV/Nonce、编码和模式,AES在C#里用起来很稳。










