算法特性
| 算法 | 支持分组模式 | 块大小 | 支持的密钥长度(字节) | 推荐模式 | 说明 |
|---|---|---|---|---|---|
| AES | ECB, CBC, CFB, OFB, CTR, GCM | 16 | 16 / 24 / 32 | CBC / GCM | 现代标准算法,广泛支持,GCM 模式具备认证功能(AEAD) |
| DES | ECB, CBC, CFB, OFB, CTR | 8 | 8 | ❌(已弃用) | 已过时,不安全,仅用于兼容旧系统 |
| 3DES | ECB, CBC, CFB, OFB, CTR | 8 | 16 / 24 | CBC | 比 DES 强,仍不推荐用于新系统,逐步被淘汰 |
| SM4 | ECB, CBC, CFB, OFB, CTR, GCM | 16 | 16 | CBC / GCM | 国密标准,对称安全,结构类似 AES |
模式说明
| 模式 | 描述 | 是否需要 padding | 是否需要 IV / Nonce |
|---|---|---|---|
| ECB | 每块独立加密,结构重复易泄露明文 | ✅ 是 | ❌ 否 |
| CBC | 上一块密文与当前块异或后加密 | ✅ 是 | ✅ 是 |
| CFB | 密文反馈,适用于流式数据 | ❌ 否 | ✅ 是 |
| OFB | 输出反馈,变成伪随机流 | ❌ 否 | ✅ 是 |
| CTR | 使用计数器生成伪随机流与明文异或 | ❌ 否 | ✅ 是(Nonce) |
| GCM | 基于 CTR 的 AEAD 模式,支持认证和加密 | ❌ 否 | ✅ 是(Nonce) |
mac类
| MAC 类型 | 是否需要手动 padding | 原因 | 加密模式 | 安全性 | 是否标准 |
|---|---|---|---|---|---|
| CBC-MAC | ✅ 是 | 是原始 CBC 加密,需手动对齐 | CBC | 有条件安全(固定长度) | ✅ 是 |
| CMAC | ❌ 否 | 内部自带 padding 逻辑 | CBC + 改进填充 | 安全,推荐 | ✅ 是(NIST SP 800-38B) |
| HMAC | ❌ 否 | 基于哈希,自动处理 padding | 哈希算法 | 安全,广泛使用 | ✅ 是(RFC 2104) |
| GMAC | ❌ 否 | AEAD 模式自动处理 | GCM(AES) | AEAD 支持认证 | ✅ 是(NIST SP 800-38D) |
为什么没有 ECB-MAC?
🔒 ECB 模式(Electronic Codebook)并不安全用于 MAC!
ECB 的特性:
每个输入块独立加密,不依赖其他块
相同的输入块产生相同的输出块 → 没有链式依赖
无法提供“完整性保护”或“认证”
这就意味着:
攻击者可以任意重排、替换块,而不会影响“MAC”值的计算,导致严重安全问题。
| 算法 | 块大小 | Padding 需求 | Padding 方式 |
|---|---|---|---|
| CBC-MAC (AES/SM4) | 16 字节 | 需要 | PKCS#7 Padding(16字节对齐) |
| CBC-MAC (DES) | 8 字节 | 需要 | PKCS#7 Padding(8字节对齐) |
CMAC 是 CBC-MAC 的改进版,CMAC 内部自动处理 padding,调用者无需关心
使用建议
| 场景 | 推荐算法 + 模式 | 说明 |
|---|---|---|
| 一般数据加密 | AES-CBC 或 SM4-CBC | 安全性高,兼容性好,注意使用随机 IV |
| 安全通信 / 认证加密 | AES-GCM 或 SM4-GCM | 支持 AEAD,可认证附加数据和密文 |
| 国密合规场景 | SM4-CBC / SM4-GCM | 满足国产化要求 |
| 老旧系统兼容 | 3DES-CBC | 性能差但可兼容,推荐逐步迁移到 AES/SM4 |

2395

被折叠的 条评论
为什么被折叠?



