AES Encrypt / Decrypt
Understand AES Encrypt / Decrypt
在你的浏览器中用口令对文本做 AES 加解密,可选 AES-256-GCM(默认)、AES-128-GCM、AES-256-CBC、AES-128-CBC 或 AES-256-CTR。
How it works
你的口令不是密钥。PBKDF2 会用 HMAC-SHA-256 对一个新生成的 16 字节随机盐迭代 100,000 次,把它拉伸成密钥,因此攻击者每猜一次都要付出这份成本,而针对某个盐预计算的表对另一个盐毫无价值。每次加密都会抽取一个随机 IV——GCM 为 12 字节,CBC 和 CTR 为 16 字节——这就是同一段文本加密两次永远不会得到相同密文的原因。输出是 base64 形式的 algorithm:salt:iv:ciphertext,除口令本身之外,携带了解密所需的每一项参数。
When to use it
- 在一小段机密内容经由工单、聊天线程或共享文档传递之前先加密它。
- 生成测试向量,检验服务端的 AES 实现与 WebCrypto 是否一致。
- 演示带认证的模式与不带认证的模式在实践中的区别。
- 读回你此前在这里加密并以文本形式保存的内容。
- 与只能接受 AES-CBC 的遗留系统做互通性验证。
Watch out for
- GCM 能检测篡改,CBC 和 CTR 不能。使用 GCM 时,密文中一个字节被改动就会让解密直接失败。使用 CTR 时,攻击者翻转密文的某一位就会翻转明文的同一位,而 CBC 正是填充预言攻击这一类问题的所在模式。只有出于互通性才选择 CBC 或 CTR,并且在这样做时要另外对密文加一层 MAC。
- 口令是上限。100,000 次 PBKDF2 迭代把猜测速度拖慢了那么多倍,却救不了一个弱口令——无论密钥多长,字典词依然会被找出来。这份输出的强度就是你输入内容的强度。
- 绝不要在同一密钥下重复使用 IV 或计数器块。本工具每次加密都会生成新的盐和 IV,因此按此使用是安全的;但当你重新实现这套格式时这条规则至关重要:重复的 GCM 随机数会泄漏两段明文的异或值,甚至可能暴露认证密钥本身。
- AES-256 与 AES-128 之争并不是那个要紧的决定。两种密钥长度都没有可实施的攻破;模式和口令才主导现实安全性。不要因为数字更大就选 AES-256-CBC 而弃用 AES-128-GCM。
Not the right tool for: 把机密发给一个尚未与你共享口令的人。这是对称加密,没有密钥交换、没有身份、也没有前向保密——那种场景请使用 age、PGP,或你所在平台已提供的收件人密钥管理。
Frequently Asked Questions
我该选择哪种 AES 算法?
AES-256-GCM 是默认值,对几乎所有新用途都是正确答案。GCM 带认证,因此篡改密文会导致解密失败,而不是返回一堆垃圾。只有当你必须与之互通的系统要求时,才选择 CBC 或 CTR——它们本身都不能检测篡改。
AES-128 比 AES-256 更不安全吗?
两者都被认为是安全的;没有可实施的攻击能攻破其中任一密钥长度。AES-256 面对未来进展的余量更大,是长期数据的惯常选择,而 AES-128 略快一些。你所选的模式(GCM 还是 CBC)对现实安全性的影响远大于密钥长度。
PBKDF2 是什么,为什么要用它?
PBKDF2(基于口令的密钥派生函数 2)使用带随机盐的 HMAC-SHA256 迭代 100,000 次,把人输入的口令变换成密码学密钥。这些迭代让暴力破解比只哈希一次慢 100,000 倍。
可以用别的语言解密这里的输出吗?
可以。输出为 algorithm:salt:iv:ciphertext,包含解密所需的每一项参数。在任意语言中复现相同的 PBKDF2 设置(100,000 次迭代、SHA-256、内嵌的盐)以及所指定的加密算法,密文就能被完全一致地解密。
How to Use AES Encrypt / Decrypt
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.