跳转到主要内容
杨月昌的软件博客
返回

AES 加密与解密:保障数据安全的利器

在现代开发中,保护敏感数据(如用户信息、支付凭证)的机密性是核心任务。AES(Advanced Encryption Standard) 作为目前全球最广泛使用的对称加密算法,是每个开发者必须掌握的“安全利器”。


一、 AES 算法深度解析

AES 是一种对称加密算法,意味着加密和解密使用同一个密钥。它基于 Rijndael 算法,处理数据块的大小固定为 128 位。

1. 核心要素

2. 加密轮次

AES 不是一次性加密完成的,而是通过多轮迭代:

  1. 字节替换 (SubBytes):通过 S-Box 进行非线性映射。
  2. 行移位 (ShiftRows):打乱矩阵行顺序。
  3. 列混合 (MixColumns):对列进行线性变换。
  4. 轮密钥加 (AddRoundKey):与轮密钥异或。

二、 C# 实战:标准 CBC 模式加密

在 .NET 中,推荐使用 System.Security.Cryptography.Aes 类,它是目前性能和安全性平衡最好的选择。

1. 高安全性的加密实现

public static string Encrypt(string plainText, string keyString, string ivString)
{
    // 将 Key 和 IV 转换为 byte[]
    byte[] key = Encoding.UTF8.GetBytes(keyString.PadRight(32)).Take(32).ToArray();
    byte[] iv = Encoding.UTF8.GetBytes(ivString.PadRight(16)).Take(16).ToArray();

    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;
        aes.Mode = CipherMode.CBC; // CBC 模式
        aes.Padding = PaddingMode.PKCS7;

        ICryptoTransform encryptor = aes.CreateEncryptor();

        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                byte[] data = Encoding.UTF8.GetBytes(plainText);
                cs.Write(data, 0, data.Length);
                cs.FlushFinalBlock();
                return Convert.ToBase64String(ms.ToArray());
            }
        }
    }
}

三、 警惕:关于“无向量” ECB 模式

你在某些代码中可能会看到无 IV 的 ECB (Electronic Codebook) 模式。

⚠️ 安全警告:ECB 模式下,相同的明文块会生成完全相同的密文块。这会导致模式泄漏(如加密图像时仍能看出轮廓),极易受到重放攻击

什么时候可以用 ECB?

仅当加密的数据非常短(小于一个块大小,16 字节)且不重复时。生产环境强烈建议优先使用 CBC 或 GCM 模式。


四、 开发者的最佳实践总结

  1. 密钥管理:不要将密钥硬编码在源码中!应使用环境变量、Azure Key Vault 或 AWS KMS。
  2. IV 的唯一性:每次加密应生成一个新的随机 IV,并将其附加在密文头部(解密时再取出来)。
  3. 使用 256 位密钥:虽然 128 位目前仍安全,但 256 位是应对未来量子计算威胁的推荐选择。
  4. 优先使用 GCM:如果你在 .NET Core 3.1+ 开发,考虑使用 AesGcm 类,它提供“关联数据的认证加密”,能同时保证机密性和完整性(防止密文被篡改)。

总结

掌握 AES 不仅是学会调用 API,更要理解 IV、模式和填充 的意义。正确使用 AES,能为你的应用建立起一道不可逾越的数据防线。



上一篇
解决本地开发中 OpenSSL 生成自签证书的常见问题
下一篇
实战:构建稳健的全局异常捕获与日志监控系统