加密算法:AES介绍
已于 2025年10月29日 09:42 修改
访问次数:0
当然可以 👍
下面是对 AES 各种加密模式(AES Modes of Operation) 的系统性介绍,包括原理、特点、优缺点和适用场景。
🧠 一、AES 是什么?
AES(Advanced Encryption Standard,高级加密标准)是一种 对称加密算法:
加密和解密使用相同的密钥。
- 分组长度:固定为 128 位(16 字节)
- 密钥长度:支持 128 / 192 / 256 位
- 当明文超过 16 字节时,需要通过“加密模式(Mode of Operation)”来分块加密。
⚙️ 二、AES 常见加密模式一览表
| 模式 | 全称 | 是否需要 IV | 是否支持并行 | 是否能检测篡改 | 说明 |
|---|---|---|---|---|---|
| ECB | Electronic Codebook | ❌ 否 | ✅ 是 | ❌ 否 | 每块独立加密,不安全 |
| CBC | Cipher Block Chaining | ✅ 是 | ❌ 否 | ❌ 否 | 经典模式,块链式依赖 |
| CFB | Cipher Feedback | ✅ 是 | ✅ 是 | ❌ 否 | 流加密方式,可逐字节加密 |
| OFB | Output Feedback | ✅ 是 | ✅ 是 | ❌ 否 | 流模式,错误不会传播 |
| CTR | Counter | ✅ 是(nonce) | ✅ 是 | ❌ 否 | 高性能流模式,安全高效 |
| GCM | Galois/Counter Mode | ✅ 是(nonce) | ✅ 是 | ✅ 是 | 同时加密+认证(AEAD) |
🔍 三、各模式详解
1️⃣ ECB(Electronic Codebook)
每个 16 字节块独立加密
原理:
C1 = E(P1)
C2 = E(P2)
C3 = E(P3)
特点:
- 简单,但相同明文块 → 相同密文块。
- 容易泄露数据结构(如图像或模式)。
优点:
- 实现简单。
缺点:
- 不安全(相同明文块有相同密文块)。
用途:
- 测试、教育演示用,不推荐生产使用。
2️⃣ CBC(Cipher Block Chaining)
每个明文块先与前一密文块异或后再加密
原理:
C1 = E(P1 ⊕ IV)
C2 = E(P2 ⊕ C1)
C3 = E(P3 ⊕ C2)
特点:
- 依赖前一块密文,需初始向量(IV)。
- 解密时也需相同 IV。
优点:
- 安全性高于 ECB。
- 不同 IV 可确保加密结果不同。
缺点:
- 不可并行。
- 解密时一旦出错会影响两块。
用途:
- 文件加密、数据库字段加密。
3️⃣ CFB(Cipher Feedback)
将 AES 块加密变为流加密,可逐字节处理。
原理:
C1 = P1 ⊕ E(IV)
C2 = P2 ⊕ E(C1)
优点:
- 无需填充(padding)。
- 可用于实时数据流。
缺点:
- 加密错误会传播。
用途:
- 网络流、实时加密通信。
4️⃣ OFB(Output Feedback)
将输出反馈到下一个加密过程,生成伪随机流。
原理:
O1 = E(IV)
O2 = E(O1)
O3 = E(O2)
C1 = P1 ⊕ O1
C2 = P2 ⊕ O2
优点:
- 错误不会传播。
- 流模式,速度快。
缺点:
- IV 不能重复(否则密钥流泄露)。
用途:
- 流式加密场景(如语音或视频)。
5️⃣ CTR(Counter Mode)
使用自增计数器,将 AES 转换为流加密。
原理:
C1 = P1 ⊕ E(nonce + 1)
C2 = P2 ⊕ E(nonce + 2)
C3 = P3 ⊕ E(nonce + 3)
优点:
- 支持并行加密,性能极高。
- 无需填充。
- 加解密过程对称。
缺点:
- 计数器(nonce)绝对不能重复,否则泄露密钥流。
用途:
- 高性能通信系统、加密传输、磁盘加密。
6️⃣ GCM(Galois/Counter Mode)
在 CTR 模式基础上增加“认证”机制(AEAD 模式)。
原理:
- 使用计数器生成密钥流。
- 同时用 Galois 乘法生成“认证标签”(tag)防止篡改。
输出:
密文 + 认证标签(Tag)
优点:
- 加密 + 防篡改,一步完成。
- 性能优异(可并行)。
缺点:
- IV/nonce 必须唯一。
用途:
- HTTPS / TLS / JWT / REST API。
✅ 四、总结推荐
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 文件或本地数据加密 | CBC | 兼容性好、安全 |
| 网络通信、API | GCM | 加密+认证 |
| 高性能并行加密 | CTR | 快速、灵活 |
| 流式加密(视频/音频) | CFB / OFB | 支持任意长度 |
| 仅教学/测试 | ECB | 简单但不安全 |
🧪 五、Python 实现举例(使用 cryptography)
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from os import urandom
# AES-256 CBC 示例
key = urandom(32) # 256-bit key
iv = urandom(16) # 128-bit IV
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
encryptor = cipher.encryptor()
decryptor = cipher.decryptor()
# 加密 / 解密
ciphertext = encryptor.update(b"secret message 1234") + encryptor.finalize()
plaintext = decryptor.update(ciphertext) + decryptor.finalize()
评论(0)