RSA 加解密、签名验签与密钥生成
编码所有处理都在浏览器本地完成,数据不上传服务器
用 RSA 公钥加密、私钥解密,或者做签名与验签 —— 全程在浏览器本地完成,密钥与内容都不会上传。四种 PEM 写法都认:`PUBLIC KEY` 与 `PRIVATE KEY`(X.509 / PKCS#8),以及 `RSA PUBLIC KEY` 与 `RSA PRIVATE KEY`(PKCS#1,OpenSSL 老版本和 `ssh-keygen` 转出来的常见形态,本工具会替它补上 ASN.1 外壳再交给浏览器的密码学接口)。手边没有密钥就用「生成密钥对」:在本地现生成一对,输出 PKCS#8 私钥与 SPKI 公钥两段 PEM,可以直接存成文件。⚠️ 三点需要知道:加密用的是 OAEP 填充 —— 浏览器接口刻意不提供 PKCS#1 v1.5 的加密(它有 Bleichenbacher 填充预言攻击),要对接只认 `PKCS1Padding` 的老系统得上服务端;RSA 能加密的数据很短,2048 位密钥配 OAEP-SHA256 时上限是 190 字节,长内容请用混合加密(随机生成一个 AES 密钥加密正文,再用 RSA 加密那把密钥);1024 位已被认为不安全,只用于兼容旧系统,新系统请用 2048 位及以上。
功能
- 五种操作:生成密钥对、加密、解密、签名、验签
- 可在本地生成 1024 / 2048 / 3072 / 4096 位的 RSA 密钥对,输出 PKCS#8 私钥与 SPKI 公钥 PEM
- 四种 PEM 写法都认,含 PKCS#1(自动补 ASN.1 外壳)
- 密钥带换行、缩进、首尾空白都能直接用
- 密文与签名可输出 Base64 或十六进制
- 加密解密用 OAEP-SHA256,签名验签用 RSASSA-PKCS1-v1_5(兼容性最好)
- 用错了密钥类型(该给公钥却给了私钥)会明确指出,而不是抛一句填充错误
使用方法
- 选择操作:生成密钥对 / 加密 / 解密 / 签名 / 验签
- 加密或签名时把 PEM 密钥粘贴进「公钥 / 私钥」选项;生成密钥时不必填
- 验签时还要把签名填进对应字段
- 把内容粘贴进输入框,按 Ctrl/⌘ + Enter 或点「运行」;生成 3072 / 4096 位密钥要等几秒
常见问题
- 为什么不能用 PKCS#1 v1.5 加密?
- 因为浏览器的 Web Crypto 接口只实现了 OAEP。这不是疏漏:v1.5 的加密存在 Bleichenbacher 填充预言攻击 —— 攻击者通过观察「填充错误」与「解密后内容不对」这两种不同的失败方式,可以逐步把密文解出来,1998 年提出以来一直有新的变体。规范因此把它从加密里排除,只保留它做签名(签名场景下不涉及填充预言)。所以本工具做不了 `RSA/ECB/PKCS1Padding`,那是老系统里很常见的写法,需要服务端或专门的库。
- RSA 能加密多长的内容?
- 很短,而且与密钥长度直接相关:RSA-OAEP 配 SHA-256 时,2048 位密钥的单次上限是 190 字节(256 减去 2×32 的哈希长度再减去 2),4096 位是 446 字节。超过就会失败。这不是实现限制,而是 RSA 的数学结构决定的。要加密长内容,行业里的通行做法是混合加密:随机生成一把 AES 密钥去加密正文,再用 RSA 只加密那把 AES 密钥 —— 而 AES 密钥正好 16 或 32 字节,远在限制之内。
- 签名和加密有什么区别?该用哪个?
- 加密解决「别人看不到」(用对方的公钥加密,只有对方能用私钥解开);签名解决「确实是某人发的、且没被改过」(用自己私钥签,任何人用你的公钥验)。两者方向相反:加密是公钥进、私钥出,签名是私钥进、公钥出。实际系统里往往两个都用 —— 比如传输一份合同,用对方的公钥加密保证保密,同时用自己的私钥签名保证来源。本工具的两个模式恰好对应这两件事,注意别把密钥给反了。
- 「生成密钥对」生成的是什么?该选多少位?
- 生成的是两段标准 PEM:PKCS#8 的私钥与 SPKI 的公钥,由浏览器的密码学随机源现生成,只在本次输出里存在。长度上,2048 位是现在的推荐值,兼容性与安全性都够;1024 位已被认为不安全(学术界能承担其分解成本),只在你必须对接某个老系统时用;3072 / 4096 更抗未来,代价是生成要等几秒,且加解密更慢。生成是纯计算,界面点击后请稍候 —— 3072 / 4096 位不是卡死了,是在算。
相关工具
AES / DES 加解密
编码用 AES、DES 或 3DES 加解密文本,支持 CBC、GCM、CTR、ECB 四种模式,密钥可写文本、十六进制或 Base64,全部在本地完成。
哈希计算
编码算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,也可算老系统用的 MD4 与 MD2,中文按 UTF-8 字节计算。全部在本地完成。
Bcrypt 生成与验证
编码生成 bcrypt 密码哈希($2y$ 前缀)或验证密码与已有哈希是否匹配,成本因子可调,全部在浏览器本地完成。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。