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) | 不需要(流模式) |
| 结论 | 禁用 | 可用但繁琐 | 推荐 |
工程建议
- 密钥长度:AES-256 优先,AES-128 也可接受;密钥必须是随机生成的 16/32 字节,不要用口令直接当密钥(口令应经 PBKDF2/Argon2 派生)。
- IV/nonce:CBC 的 IV 每次随机生成并随密文传输(IV 不需要保密,只需要不可预测);GCM 的 nonce 绝对不能用同一密钥重复。
- 填充:CBC/ECB 用 PKCS7;解密失败时统一报"解密失败",不要区分"填充错误"和"密钥错误"(避免填充预言攻击)。
最后更新:2026-09-04