🔒 AES加解密
Web Crypto API · 五种模式 · Base64/Hex输出
Web Crypto API · 五种模式 · Base64/Hex输出
AES(高级加密标准)是最常用的对称加密算法,由NIST发布,取代了DES。支持128、192、256位密钥长度,广泛应用于HTTPS、Wi-Fi、文件加密、数据库加密等场景。
CBC(密文分组链接)模式需要IV向量,每个明文块先与上一密文块异或再加密,相同的明文在不同位置会得到不同密文,安全性高。ECB(电子密码本)模式不使用IV,相同明文块永远产生相同密文,容易泄露格式信息,不推荐用于敏感数据。
128位已足够安全且速度最快;192位是折中选择;256位安全性最高但速度稍慢。密钥至少16字节(128位),工具会自动根据密钥长度选择对应位宽,超过32字节会截断。
IV(初始化向量)是CBC/CFB/OFB/CTR模式需要的一个随机种子,长度固定16字节,作用是让每次加密结果不同。ECB模式不需要IV。解密时必须使用与加密时相同的IV,否则解不出来。
AES是按128位(16字节)分块加密的,不足一块需要补满(通常是PKCS7填充),所以密文长度是最接近明文的16字节整数倍。用Base64或Hex表示后长度也会相应增加。
Base64用64个字符表示二进制,长度约为明文的4/3倍,更紧凑适合传输存储;Hex用十六进制每字节2字符,长度正好是明文的2倍,更直观方便阅读和程序处理。两者只是表示方式不同,内容一致。
AES是对称加密,可逆。用同一个密钥加密和解密,属于"有密钥就能还原"的加密。它和MD5/SHA这类不可逆的哈希完全是两回事,别混淆。
本工具使用浏览器内置的Web Crypto API,密钥和明文都在本地浏览器执行,不会上传到服务器,相对安全。但要注意,任何网页加密都受浏览器环境和脚本注入风险影响,传输敏感数据仍建议走HTTPS。
AES把数据按128位(16字节)分成一个个固定大小的块,逐块加密,因此叫"分组密码"。密钥长度决定加密轮数:128位10轮、192位12轮、256位14轮。
每一轮里做字节代换(S盒)、行移位、列混合、轮密钥加四步变换,把明文和密钥彻底搅在一起,最终输出密文。
| 密钥长度 | 密钥字节 | 加密轮数 | 安全等级 |
|---|---|---|---|
| AES-128 | 16字节 | 10轮 | 足够安全,速度最快 |
| AES-192 | 24字节 | 12轮 | 折中 |
| AES-256 | 32字节 | 14轮 | 最高安全,速度稍慢 |
分组密码本身只能加密固定块,要加密任意长度的数据就得靠"工作模式"把它们串起来。
| 模式 | 是否需要IV | 是否并行 | 特点与用途 |
|---|---|---|---|
| ECB | 不需要 | 可并行 | 相同明文块产出相同密文,有格式泄露风险,尽量不用 |
| CBC | 需要(16字节) | 不可并行 | 加密前异或上一块密文,最常用,安全性好 |
| CFB | 需要 | 不可并行 | 把上一密文再加密后与明文异或,可做流式 |
| OFB | 需要 | 不可并行 | 用密钥流异或明文,错误不会传播 |
| CTR | 需要(计数器) | 可并行 | 计数器逐块加一,流式工作,适合高速场景 |
一句话总结:日常推荐CBC,高速/大文件推荐CTR,需要兼容旧系统才考虑ECB。
关键在于IV。CBC等模式要求每次加密用不同的随机IV,IV参与第一个块的运算,进而影响后面所有块,所以即使明文完全相同,只要IV不同,密文就不同。
| 明文长度 | CBC密文(Base64) | CTR密文(Base64) | Hex长度 |
|---|---|---|---|
| 1字节 | 16字节→24字符 | 1字节→4字符 | 32字符 |
| 15字节 | 16字节→24字符 | 15字节→20字符 | 30字符 |
| 16字节 | 32字节→44字符 | 16字节→24字符 | 32字符 |
| 100字节 | 112字节→152字符 | 100字节→136字符 | 200字符 |
| 算法 | 类型 | 密钥/长度 | 可逆 | 用途 |
|---|---|---|---|---|
| AES | 对称加密 | 128/192/256位 | 可逆 | 数据加密 |
| DES | 对称加密 | 56位 | 可逆 | 已淘汰,教学 |
| MD5 | 哈希 | 128位摘要 | 不可逆 | 校验 |
| SHA-256 | 哈希 | 256位摘要 | 不可逆 | 校验/签名 |
1. 输入待加密/解密的文本。
2. 输入密钥(至少16字符对应128位)。
3. 选择加密模式(CBC需填写IV)。
4. 选择输出格式(Base64/Hex)。
5. 点击加密或解密按钮。