AES 加密工具(AES-128/192/256)
用 AES-128/192/256 加密文本,支持 CBC、GCM、CTR、CFB、OFB 或 ECB。可使用兼容 OpenSSL 的口令模式或十六进制原始密钥 + IV,在浏览器中运行。
输出为 Base64 编码的 OpenSSL “Salted__” 格式:8 字节随机盐后接密文。密钥和 IV 由口令和盐派生,因此同一段文本每次加密结果都不同。等效命令:
openssl enc -aes-256-cbc -md md5 -a -A -k '…'完全在浏览器中运行,您的数据不会被上传。
什么是 AES 加密?
使用标准分组密码 AES(FIPS 197)加密文本或十六进制数据。你可以用口令按 OpenSSL 的 "Salted__" 格式派生密钥,这样 openssl enc 和 CryptoJS 都能解密结果;也可以提供十六进制的原始密钥和 IV,以便与代码互通。支持 CBC、CFB、CTR、OFB、ECB 以及带认证的 GCM 模式。
如何使用 AES 加密
- 保持密钥来源为口令(兼容 OpenSSL)并输入口令,或切换到原始密钥 + IV(十六进制)并以十六进制输入准确的密钥和 IV。
- 选择模式和填充(带 PKCS#7 的 CBC 是 OpenSSL 的默认值);使用原始密钥时还可以选择 GCM 以及可选的附加认证数据。
- 输入或粘贴明文(处理二进制数据时,可把输入编码切换为 Hex)。
- 点击加密,选择 Base64 或 Hex 作为输出编码,然后复制密文。
示例
Key 2b7e151628aed2a6abf7158809cf4f3c, IV 000102030405060708090a0b0c0d0e0f, mode CBC, padding None, hex plaintext 6bc1bee22e409f96e93d7e117393172a
7649abac8119b246cee98e9b12e9197d
NIST SP 800-38A F.2.1 测试向量,输出编码为 Hex。
何时使用 AES 加密
用于为使用 AES 的应用生成测试数据、加密稍后用 OpenSSL 或 CryptoJS 解密的片段,或了解模式和填充如何改变输出。对于真实数据,优先选择 GCM(或 CBC 加单独的 MAC),因为仅靠 CBC/CTR/CFB/OFB 无法发现篡改。避免使用 ECB:相同的分组会得到相同的密文。对于文件或长期机密,请使用 age、GnuPG 或平台自带加密 API 等专用工具。
AES 加密 的工作原理
AES 使用 128、192 或 256 位密钥(10、12 或 14 轮)加密 16 字节的分组。在口令模式下,会生成随机的 8 字节盐,并使用 OpenSSL 的 EVP_BytesToKey(MD5,一次迭代——即 openssl enc -md md5 和 CryptoJS 的默认设置)或 PBKDF2-HMAC-SHA256(openssl enc -pbkdf2)派生密钥和 IV;输出是 Salted__ + 盐 + 密文的 Base64。在原始模式下,直接使用你提供的十六进制密钥和 IV,只返回密文。CBC 和 ECB 使用 PKCS#7(或零字节/无)填充;CFB、OFB 和 CTR 是不需要填充的流模式。GCM 使用浏览器的 Web Crypto API,采用 12 字节 nonce,并附加 16 字节认证标签。该实现通过了 NIST SP 800-38A 和 GCM 测试向量。
常见用例
- 无需终端即可生成兼容
openssl enc -aes-256-cbc的密文 - 调试时复现
CryptoJS.AES.encrypt(text, passphrase)的输出 - 为后端实现生成 AES-GCM 测试向量(密文 + 标签)
- 用 256 位原始密钥和 IV 加密一小段机密,以便粘贴到配置文件中
- 演示 ECB 模式相比 CBC 或 CTR 为什么会泄露数据模式
安全提示
一切都在你的浏览器本地运行,不会上传任何内容。使用 MD5 的 EVP_BytesToKey 是一种为兼容性而保留的弱而快的密钥派生方式——对于重要数据,请选择迭代次数较多的 PBKDF2,或使用随机的原始密钥。没有认证的加密(CBC、CTR、CFB、OFB)无法发现数据被修改。
常见问题
输出与 OpenSSL 兼容吗?
兼容。在口令模式下,结果与 openssl enc -aes-256-cbc -md md5 -a -A -k <passphrase> 生成的完全一致(使用 MD5 的 EVP_BytesToKey);选择 PBKDF2-HMAC-SHA256 时则对应 -pbkdf2 -iter N。加上 -d 即可解密。页面会在口令输入框下方显示对应的命令。
为什么每次得到的密文都不一样?
口令模式每次加密都使用新的随机盐,所以密钥、IV 和密文都会变化。这是预期行为;任何一个输出都能用同一个口令解密。原始密钥模式对相同的密钥、IV 和输入是确定性的。
应该选择哪种模式?
选 GCM,因为它还会认证数据(只要有任何改动,解密就会失败)。如果接收方只支持 openssl enc,请使用 CBC——OpenSSL enc 不支持 GCM。切勿在同一密钥下重复使用 GCM nonce 或 CTR 计数器。
口令和原始密钥有什么区别?
口令会通过密钥派生函数和盐转换成密钥,盐会保存在输出中。原始密钥则按输入的原样使用(AES-128/192/256 分别为 16、24 或 32 字节),并需要配合你另行共享的 IV。