AES 加密与解密
使用 AES-128、192 或 256 加密和解密文本,支持 GCM、CBC、CTR 等模式。
解密时还需要这个密码。输入的任何内容都不会离开本页。
OpenSSL 的默认值是 10,000。任何次数都可以:次数越多,密码越难猜;解密时必须使用相同的次数。
使用 OpenSSL 时的常用选择。需要 IV;填充为完整的分组。
openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -a -AOpenSSL 会提示输入密码;把文本粘贴进去,或加上 -in 和 -out 文件。
用密码或自定义的密钥和 IV,以 AES-256(或 AES-128、AES-192)加密文本;也可以粘贴 Base64 或 hex 格式的 AES 密文进行解密。使用密码时,结果格式与 openssl enc -pbkdf2 相同:依次是 Salted__ 头、8 字节随机盐和密文,密钥和 IV 由 PBKDF2-HMAC-SHA256 派生。默认设置(AES-256、CBC 模式、PKCS#7 填充、Base64 输出)与 openssl enc -aes-256-cbc -pbkdf2 -a 一致,GCM、CTR、CFB、OFB 和 ECB 也只需点一下即可切换。结果随输入实时更新。所有处理都在浏览器中完成,文本、密码和密钥不会离开你的设备;完全免费,无需注册。
如何用 AES 加密和解密文本
- 选择“加密”或“解密”。输入要加密的文本,或粘贴要解密的 Base64 或 hex 文本,格式会自动识别。
- 输入密码(点“生成”可得到一个强密码),或切换到“密钥和 IV(hex)”,按提示的长度输入或生成密钥和 IV。
- 选择密钥长度(128、192 或 256 位)和模式。解密时,必须使用与加密时相同的密码、迭代次数、密钥长度和模式。
- 复制或下载结果,也可以点“交换”把结果移到输入框并切换方向。在“OpenSSL 等效命令”下,页面会显示对应的 openssl 命令,其中不含你的密码。
功能
- AES-128、AES-192 和 AES-256,支持 CBC、GCM、CTR、CFB、OFB、ECB 模式
- openssl enc -pbkdf2 格式的密码模式:Salted__ 头、8 字节随机盐,密钥和 IV 由 PBKDF2-HMAC-SHA256 派生
- PBKDF2 迭代次数可选 10,000(OpenSSL 默认值)、100,000 或 600,000,也可填入最多 1000 万的任意次数
- 密钥和 IV 模式:使用自己的 hex 密钥和 IV,或点“生成”得到随机值
- AES-GCM 能识别错误的密码或密钥,以及密文的任何改动
- PKCS#7 填充;CBC 和 ECB 模式下也可不填充
- 输出 Base64 或 hex;输入的 Base64 或 hex 自动识别
- 除 GCM 外,每种模式都给出对应的 openssl enc 命令
隐私安全吗?
是的。AES 在浏览器内的 WebAssembly 中运行,由密码生成密钥则交给浏览器自带的 Web Crypto 完成。你的文本、密码和密钥既不会上传也不会保存,页面显示的 openssl 命令中也不包含它们。
常见问题
应该选择哪种 AES 模式?
新数据建议用 GCM:它在加密之外,还能发现文本的任何改动和错误的密码。如果对方使用无法读取 GCM 的 openssl enc,就选默认的 CBC;只有需要与现有系统保持一致时,才选 CTR、CFB 或 OFB。避免使用 ECB:相同的 16 字节块会得到相同的密文,文本中的规律会暴露出来。
能用 OpenSSL 解密结果吗?
可以,GCM 除外。使用默认设置时:echo 'U2FsdGVkX1…' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -a -A,随后 OpenSSL 会提示输入密码。把 256 和 cbc 换成你用的密钥长度和模式(ecb、ctr、cfb、ofb),-iter 改为你的迭代次数;如果关闭了填充,再加上 -nopad。如果输出的是 hex,去掉 -a -A,先用 xxd -r -p 把文本转换回字节再交给 openssl。密钥和 IV 模式则用 -K <密钥 hex> -iv <IV hex> 代替 -pbkdf2 -iter。openssl enc 不支持 GCM(不支持 AEAD 密码),所以 GCM 密文只能在本页或用代码读取。
为什么每次加密的结果都不一样?
因为每次用密码加密都会选用新的随机盐,密钥、IV 和整个输出都会随之改变,但每个版本都能解密回同样的文本。这是有意为之:别人无法看出两条消息是否相同。在密钥和 IV 模式下,密钥和 IV 相同时输出也相同,所以每条消息都应生成新的 IV:用同一个密钥重复使用 IV,会削弱 CBC,并让 CTR 和 GCM 彻底失去安全性。
为什么提示密码错误?
因为有某项设置不一致:密码、迭代次数、密钥长度、模式和填充都必须与加密时相同,而密文中只保存了盐。以 U2FsdGVkX1 开头、但由不带 -pbkdf2 的 openssl enc 或用口令加密的 CryptoJS 生成的密文,采用的是旧的密钥派生方式(EVP_BytesToKey),本页无法读取。请用 -pbkdf2 重新加密;如果你有原始密钥和 IV,也可以改用密钥和 IV 模式。
AES-256 加密安全吗?
安全。无论哪种密钥长度,AES 都没有实际可行的攻击,薄弱环节在于密码。请使用足够长的随机密码(点“生成”即可);在两端都由你掌控时,把迭代次数提高到 600,000,这是 OWASP 目前对 PBKDF2-HMAC-SHA256 的建议值。如果还需要确认文本未被篡改,请选择 GCM。