AES / DES / 3DES 加解密
编码所有处理都在浏览器本地完成,数据不上传服务器
用对称密钥加解密文本。AES 是今天唯一该用的选择(浏览器里由 Web Crypto 原生实现,走硬件加速);DES 的 56 位密钥在 1998 年就被专用机器在几天内穷举完了,留着只是为了读老数据;3DES 是它的补丁版,靠三次加密把有效强度提到 112 位,同样只该用来对接无法改动的老系统。模式的选择比算法更容易出错:CBC 是通行默认(需要 16 字节 IV),GCM 额外提供完整性校验、能发现密文被篡改(这是 CBC 做不到的),CTR 是流式、不需要填充,而 ECB 会对相同的明文块产生相同的密文块、图案直接泄露 —— 本工具保留它只为兼容老系统,AES 下更是直接拒绝。全部计算在浏览器本地完成,密钥与明文都不会上传。
功能
- 三种算法:AES(128 / 192 / 256 位)、DES、3DES
- 四种模式:CBC、GCM、CTR、ECB —— 各自标注了适用场景
- 密钥与 IV 可写文本、十六进制或 Base64,十六进制容忍空格、冒号与 0x 前缀
- AES 走浏览器原生 Web Crypto(硬件加速),DES / 3DES 自带实现
- GCM 的认证标签自动附加在密文末尾,与其他工具的输出格式一致
- 长度不对时指出实际长度与要求的长度,而不是干巴巴一句「无效密钥」
使用方法
- 选择方向:加密或解密
- 选择算法与模式(新项目用 AES + CBC 或 GCM)
- 填入密钥与 IV,按需切换它们的书写形式
- 粘贴内容,按 Ctrl/⌘ + Enter 或点「运行」,然后复制结果
常见问题
- CBC、GCM、CTR、ECB 该怎么选?
- 新项目用 GCM(AES 下)—— 它除了保密还验证完整性,密文被改过一个字节就会解密失败,而 CBC 不会:CBC 解出一段被篡改的数据照样「成功」,只是内容是垃圾。要对接老系统时通常只能用 CBC,它是几十年的通行默认,几乎每个库都支持。CTR 把分组密码当流密码用,不需要填充,适合数据长度不确定的场合。ECB 不要用 —— 它对相同的明文块产生相同的密文块,加密一张位图会直接透出原图轮廓,这一点在维基百科的「ECB 企鹅图」里看得很清楚。
- IV 是什么?可以固定不变吗?
- IV(初始向量)的作用是让同一份明文在同一个密钥下每次加密出不同的密文。它在 CBC 与 CTR 里不需要保密,但绝对不能重复使用:CBC 下重复的 IV 会让攻击者看出两段明文是否相同,CTR 与 GCM 下重复的 IV 更糟 —— 两条密文异或就能消掉密钥流,等于明文直接暴露。正确做法是每次加密都生成一个随机 IV,并与密文一起保存(IV 不需要保密)。ECB 没有 IV,这也正是它不安全的原因之一。
- AES 为什么没有 ECB 模式?
- 因为我用的浏览器原生接口(Web Crypto)没有提供它。这不是疏漏:规范有意排除了这个模式,理由就是前面说的图案泄露。你要兼容的老系统如果只认 AES-ECB,本工具帮不上;DES / 3DES 的 ECB 倒是保留了(那两个算法的老系统里 ECB 更常见)。
- 密钥要写多长?为什么老是提示长度不对?
- 长度由算法定死,没有商量余地:AES 用 16、24 或 32 字节的密钥(对应 128 / 192 / 256 位),DES 必须 8 字节,3DES 必须 24 字节。注意十六进制里两个字符才算一个字节 —— 写 32 个十六进制字符得到的是 16 字节(AES-128),不是 32 字节。IV 同理:AES-CBC 要 16 字节,AES-GCM 用 12,DES 与 3DES 要 8。
- 密钥错了会怎样?
- 除了 GCM,其他模式不会报错 —— 它们会「成功地」解出一堆随机字节,然后本工具在按 UTF-8 解码时失败,提示你密钥或 IV 可能不对。这是对称加密的固有特性:密文里没有校验信息,解密方无法判断结果对不对。GCM 因为有认证标签,密钥错了会立刻检测出来。所以新系统用 GCM 不只是为了防篡改,也是为了早一点发现自己把密钥搞错了。
相关工具
RC4 加解密
编码用 RC4 加解密文本,密钥可写文本或十六进制,密文输出 Base64 或十六进制。适合读老协议的数据,新系统请用 AES。
哈希计算
编码算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,也可算老系统用的 MD4 与 MD2,中文按 UTF-8 字节计算。全部在本地完成。
Gzip 压缩解压
编码把文本压成 gzip 并输出 Base64 或十六进制,也能反过来解压,附带原始大小与压缩比,全部在浏览器本地完成。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。