什么是 AES?
AES(高级加密标准)是一种对称分组密码算法,被美国政府采用作为加密机密信息的标准。它使用 128、192 或 256 位的密钥以 128 位的固定大小块加密数据。
快速了解
| 全称 | 高级加密标准 |
|---|---|
| 创建时间 | 2001 年由 NIST 确立(算法由 Daemen 和 Rijmen 设计) |
| 规范文档 | 官方规范 |
AES 工作原理
AES 于 2001 年由 NIST 在经过五年的选择过程后确立,取代了旧的 DES 标准。该算法最初称为 Rijndael,由比利时密码学家 Joan Daemen 和 Vincent Rijmen 设计。AES 在称为状态的 4x4 字节矩阵上操作,应用多轮替换、置换和混合操作。AES-128 使用 10 轮,AES-192 使用 12 轮,AES-256 使用 14 轮。它广泛用于 SSL/TLS、文件加密、VPN 和安全消息传递。
主要特点
- 对称加密(加密/解密使用相同密钥)
- 128 位块大小的分组密码
- 密钥大小:128、192 或 256 位
- 在硬件和软件中都很快
- 没有已知的针对完整 AES 的实际攻击
- 美国政府批准用于机密数据
常见用途
- 文件和磁盘加密
- SSL/TLS 安全通信
- VPN 隧道
- 安全消息应用
- 数据库加密
示例
AES 加密模式:
ECB(电子密码本)- 不推荐
CBC(密码块链接)- 需要 IV
CTR(计数器模式)- 可并行化
GCM(伽罗瓦/计数器模式)- 认证加密
AES-256-GCM 示例(Node.js):
const crypto = require('crypto');
function encrypt(text, key) {
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
const tag = cipher.getAuthTag();
return { iv, encrypted, tag };
}
密钥大小:
AES-128: 16 字节(128 位)- 10 轮
AES-192: 24 字节(192 位)- 12 轮
AES-256: 32 字节(256 位)- 14 轮
OpenSSL 命令:
openssl enc -aes-256-cbc -salt -in file.txt -out file.enc