C实现AES-CBC加密工具类含完整源码及使用教程
目录
C#实现AES-CBC加密工具类(含完整源码及使用教程)
一、AES-CBC加密应用场景
AES(Advanced Encryption Standard)作为全球公认的安全加密标准,广泛使用在以下场景:
- API通信加密 :保护HTTP接口传输的敏感数据(如身份令牌、支付信息)
 - 文件安全存储 :加密本地配置文件、数据库连接字符串等
 - 用户隐私保护 :加密存储密码、身份证号等PII(个人身份信息)
 - 跨平台数据交换 :与Java/Python等其他语言实现的加密系统互通
 - 物联网设备通信 :保障设备与控制端的数据传输安全
 
其中CBC模式(密码块链模式)通过引入初始化向量(IV),能有效防止相同明文生成相同密文的问题,安全性优于ECB模式。
二、工具类完整实现代码
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
/// <summary>
/// AES-CBC加密工具类(128/192/256位密钥)
/// </summary>
public static class AesCbcHelper
{
    /// <summary>
    /// AES加密(输出Base64字符串)
    /// </summary>
    /// <param name="plainText">明文</param>
    /// <param name="key">密钥(16/24/32字节)</param>
    /// <param name="iv">初始化向量(16字节)</param>
    public static string Encrypt(string plainText, byte[] key, byte[] iv)
    {
        // 参数校验
        ValidateKeyAndIV(key, iv);
        
        using (Aes aesAlg = Aes.Create())
        {
            // 配置加密参数
            aesAlg.Key = key;
            aesAlg.IV = iv;
            aesAlg.Mode = CipherMode.CBC;     // 设置为CBC模式[4,9](@ref)
            aesAlg.Padding = PaddingMode.PKCS7; // 使用PKCS#7填充[3,6](@ref)
            // 创建加密器
            ICryptoTransform encryptor = aesAlg.CreateEncryptor();
            
            // 执行加密
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
    }
    /// <summary>
    /// AES解密(输入Base64字符串)
    /// </summary>
    public static string Decrypt(string cipherText, byte[] key, byte[] iv)
    {
        ValidateKeyAndIV(key, iv);
        
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;
            aesAlg.Mode = CipherMode.CBC;
            aesAlg.Padding = PaddingMode.PKCS7;
            ICryptoTransform decryptor = aesAlg.CreateDecryptor();
            
            using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }
    /// <summary>
    /// 密钥与IV校验
    /// </summary>
    private static void ValidateKeyAndIV(byte[] key, byte[] iv)
    {
        if (!IsValidKeySize(key.Length))
            throw new ArgumentException("密钥长度应为16/24/32字节");
        
        if (iv.Length != 16)
            throw new ArgumentException("IV长度必须为16字节");
    }
    /// <summary>
    /// 验证密钥长度
    /// </summary>
    private static bool IsValidKeySize(int keySize)
    {
        return keySize == 16 || keySize == 24 || keySize == 32; // 支持128/192/256位[9](@ref)
    }
}三、使用教程(控制台示例)
class Program
{
    static void Main()
    {
        try
        {
            // 原始数据
            string original = "CSDN开发者社区2023";
            
            // 生成密钥和IV(生产环境应从安全存储获取)
            byte[] key = Encoding.UTF8.GetBytes("ThisIsASecretKey16"); // 16字节密钥
            byte[] iv = Encoding.UTF8.GetBytes("16ByteInitVector");     // 16字节IV
            // 加密
            string encrypted = AesCbcHelper.Encrypt(original, key, iv);
            Console.WriteLine($"加密结果:{encrypted}");
            // 解密
            string decrypted = AesCbcHelper.Decrypt(encrypted, key, iv);
            Console.WriteLine($"解密结果:{decrypted}");
        }
        catch (CryptographicException ex)
        {
            Console.WriteLine($"加解密失败:{ex.Message}");
        }
    }
}四、关键功能说明
1. 参数验证机制
• 密钥长度强制校验(16/24/32字节)
• IV长度必须为16字节
• 自动处理Base64编解码
2. 安全增强特性
• 使用CBC模式防止模式攻击
• 采用PKCS#7填充标准
• 通过
using
语句确保资源释放
3. 异常处理建议
• 捕获
CryptographicException
处理加解密失败
• 使用
ArgumentException
提示参数错误
• 建议在生产环境中记录操作日志
五、注意事项
- 密钥管理 :切勿硬编码密钥,应使用密钥管理系统(如Azure Key Vault)
 - IV生成规则 :每次加密应生成随机IV(示例为演示固定值)
 - 性能优化 :对大数据流建议采用分块加密
 - 跨平台互通 :与其他语言对接需统一字符编码(推荐UTF-8)