1. 基础概念
AES(Advanced Encryption Standard,高级加密标准)是一种 对称加密算法,由美国国家标准与技术研究院(NIST)于2001年正式发布,取代了旧的 DES 算法。它被广泛应用于政府、金融、物联网等领域,是目前全球公认最安全的加密算法之一。
2. 核心特性
|
特性 |
说明 |
|
对称加密 |
加密和解密使用 同一个密钥 |
|
分组加密 |
数据被分割为固定长度的 128位(16字节) 块进行处理 |
|
密钥长度 |
支持 128位、192位、256位 三种密钥长度(安全性递增) |
|
加密轮数 |
根据密钥长度自动确定:128位(10轮)、192位(12轮)、256位(14轮) |
3. 加密过程(以 AES-128 为例)
3.1 整体流程
明文输入 → 初始轮密钥加 → 10轮加密变换 → 最终密文输出
3.2 每轮操作的 4 个关键步骤
- SubBytes(字节替换)
使用 S-Box(替换盒)对每个字节进行非线性替换,增强混淆性。

- ShiftRows(行位移)
对数据块的 每一行 进行循环左移:
- 第1行不移位
- 第2行左移1字节
- 第3行左移2字节
- 第4行左移3字节

- MixColumns(列混淆)
通过矩阵乘法对 每一列 进行线性变换,增强扩散性。 - AddRoundKey(轮密钥加)
将当前轮次的 扩展密钥 与数据块进行异或(XOR)操作。
4. 密钥扩展(Key Expansion)
将初始密钥扩展为 11组轮密钥(AES-128 需要 10 轮加密 + 1 次初始轮密钥加):
- 通过 RotWord(字循环)、SubWord(字替换)、Rcon(轮常数异或)生成新密钥
- 确保每轮使用的密钥唯一且不可预测
5. 工作模式(Modes of Operation)
|
模式 |
全称 |
特点 |
适用场景 |
|
ECB |
Electronic Codebook |
简单快速,但一样明文生成一样密文(易被攻击) |
❌ 不推荐使用 |
|
CBC |
Cipher Block Chaining |
引入 IV(初始化向量),前一块密文影响后一块 |
文件加密、TLS |
|
CTR |
Counter |
将块加密转换为流加密,支持并行计算 |
实时流数据加密 |
|
GCM |
Galois/Counter Mode |
提供加密 + 完整性校验(MAC),性能高效 |
网络通信、物联网 |
6. 安全性
- 理论安全性:目前没有已知的 多项式时间算法 能破解 AES(暴力破解需 2^128 次操作,宇宙寿命内无法完成)。
- 实际风险:主要来自 实现错误(如弱密钥、IV 重用)或 侧信道攻击(功耗分析、计时攻击)。
最佳实践:
- 优先选择 256位密钥
- 使用 CBC/CTR/GCM 模式,避免 ECB
- IV 必须随机且不可预测(每次加密生成新 IV)
- 结合 HMAC 或 AEAD(如 GCM)保证数据完整性
7. 代码示例(伪代码)
dart
// 使用 Flutter 的 `encrypt` 库实现 AES-CBC 加密
import 'package:encrypt/encrypt.dart';
void main() {
final plainText = 'Secret Message';
final key = Key.fromUtf8('32-byte-long-encryption-key-1234567890'); // AES-256
final iv = IV.fromSecureRandom(16); // 生成随机 IV
final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
final encrypted = encrypter.encrypt(plainText, iv: iv);
print('密文: ${encrypted.base64}');
print('解密: ${encrypter.decrypt(encrypted, iv: iv)}');
}
8. 常见问题
- Q: AES 会被量子计算机破解吗?
A: 理论上 Grover 算法可将暴力破解时间开平方(如 AES-256 → 等效安全性 128位),但仍是长期安全的。 - Q: 为什么要避免 ECB 模式?
A: ECB 会暴露明文结构(如图像加密后仍可见轮廓):
https://i.imgur.com/4u7TcbT.png - Q: 如何安全存储密钥?
A: 使用硬件安全模块(HSM)、Android Keystore/iOS Keychain,或基于口令的密钥派生(PBKDF2)。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


