WebTool

AES 加密模式怎么选:ECB 为什么不安全,CBC 与 GCM 差在哪?

WebTool 团队 · 发布于 2026-09-04 · AES / 加密 / 安全

AES 是分组加密算法,每次只加密 16 字节;长明文需要"工作模式"来串联分组。ECB 模式会让相同明文产生相同密文从而泄露数据模式,任何场景都不应使用;需要认证加密选 GCM,兼容性优先选 CBC + HMAC。 想动手验证可以用本站 AES 工具,密钥不出浏览器。

ECB:企鹅图问题

ECB 把明文逐块独立加密。一张位图用 ECB 加密后,色块边界依然清晰可辨——这就是著名的"ECB 企鹅"。只要明文有重复结构(JSON 字段、协议头、图片色块),密文就会暴露这些结构。ECB 的唯一合法用途是加密恰好一块(16 字节)的随机数据,比如密钥封装。

三种模式对比

维度 ECB CBC GCM
模式泄露 ❌ 严重 ✅ 无 ✅ 无
需要 IV 不需要 需要(不可预测) 需要 nonce(绝不重用)
完整性校验 无(需另配 HMAC) ✅ 内置认证标签
并行加密 不可(解密可)
填充 需要 需要(PKCS7) 不需要(流模式)
结论 禁用 可用但繁琐 推荐

工程建议

  1. 密钥长度:AES-256 优先,AES-128 也可接受;密钥必须是随机生成的 16/32 字节,不要用口令直接当密钥(口令应经 PBKDF2/Argon2 派生)。
  2. IV/nonce:CBC 的 IV 每次随机生成并随密文传输(IV 不需要保密,只需要不可预测);GCM 的 nonce 绝对不能用同一密钥重复。
  3. 填充:CBC/ECB 用 PKCS7;解密失败时统一报"解密失败",不要区分"填充错误"和"密钥错误"(避免填充预言攻击)。

最后更新:2026-09-04