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 加密

  1. 保持密钥来源为口令(兼容 OpenSSL)并输入口令,或切换到原始密钥 + IV(十六进制)并以十六进制输入准确的密钥和 IV。
  2. 选择模式和填充(带 PKCS#7 的 CBC 是 OpenSSL 的默认值);使用原始密钥时还可以选择 GCM 以及可选的附加认证数据。
  3. 输入或粘贴明文(处理二进制数据时,可把输入编码切换为 Hex)。
  4. 点击加密,选择 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。

探索更多分类