RSA 加解密与签名验签

生成 RSA 密钥对(1024 / 2048 / 4096 位),或导入已有 PEM 公钥私钥做加密解密、签名验签;支持 PKCS#1 v1.5 与 OAEP(SHA-256 / SHA-1 / SHA-512),自动提示明文长度上限,全部在浏览器本地完成

RSA 加解密与签名验签是什么

在浏览器里完成 RSA 的整套操作:生成 1024 / 2048 / 4096 位密钥对,导入已有的 PEM 公钥私钥,用公钥加密、私钥解密,或用私钥签名、公钥验签。加密支持 PKCS#1 v1.5 与 OAEP 两种填充,OAEP 的摘要可选 SHA-256 / SHA-1 / SHA-512;签名摘要同样可选,签名与密文都能用 Base64 或 Hex 表示。RSA 是非对称算法里最普及的一个,接口联调、JWT/证书相关排查、给一段配置做临时加密时都用得上。私钥与明文全程留在浏览器内存,不会上传。

所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。

怎么用RSA 加解密与签名验签

  1. 在「密钥对」tab 选密钥长度(2048 位是通用选择),点「生成密钥对」,公钥与私钥会立刻填进下面的两个框
  2. 已有密钥就跳过生成,直接把 PEM 粘进公钥/私钥框 —— 公钥认 PUBLIC KEY 与 RSA PUBLIC KEY 两种头,私钥认 PKCS#1 与 PKCS#8,只粘中间的 base64 也行
  3. 看输入框下方那行绿字确认解析结果(「已识别为 2048 位公钥」),红字则是格式不对,会说明具体是哪种情况
  4. 切到「加密解密」,选填充方式与密文格式,输入明文,密文实时出现在下方
  5. 解密时把密文贴进来,填充方式必须与加密方一致;点「拿去解密」可以把刚加密的结果直接带过去
  6. 签名验签在第三个 tab:私钥签名、公钥验签,两边的摘要算法要选同一个

示例

输入

在「密钥对」生成 2048 位密钥,切到「加密解密」,填充 PKCS#1 v1.5,明文填「用 RSA 公钥加密这句话」

输出

256 字节密文(Base64 后 344 个字符);点「拿去解密」可以原样还原明文

同一条明文每次加密的密文都不同(填充里有随机字节),但签名是确定性的:同一消息 + 同一私钥 + 同一摘要每次都签出同样的结果。

常见问题

为什么密文长度总是固定的?

RSA 的输出长度恒等于密钥长度:1024 位固定 128 字节、2048 位固定 256 字节、4096 位固定 512 字节,与明文多长无关。页面在解密前会检查这一点,长度对不上会直接告诉你「这段不是用这把密钥加密的」,而不是抛一句英文报错。

PKCS#1 v1.5 和 OAEP 该选哪个?

新系统选 OAEP。PKCS#1 v1.5 在近二十年里被反复证明存在填充预言攻击(Bleichenbacher 类),只是因为历史系统太多才还在用。两者互不兼容:选了 OAEP 就必须和对方确认摘要算法,SHA-1 与 SHA-256 是两个不同方案。

从 openssl 或 Java 拿到的密钥为什么解析不了?

多半是格式差异而不是密钥有问题。公钥可能是 SPKI(BEGIN PUBLIC KEY)或 PKCS#1(BEGIN RSA PUBLIC KEY),私钥可能是 PKCS#1(BEGIN RSA PRIVATE KEY)或 PKCS#8(BEGIN PRIVATE KEY)—— 这四种这里都认。如果拿到的是 EC 密钥、OpenSSH 格式或证书,那就不是 RSA,页面会明确说清是哪一类。被口令加密过的私钥需要先 openssl rsa -in key.pem -out plain.pem 解出来。

为什么把私钥填进公钥框会报错?

私钥里包含公钥的信息,但格式不同,不能当公钥用。页面会认出「这是私钥」并提示你去掉 BEGIN 行那一段才是公钥;反过来把公钥填进私钥框也一样会被识别出来。

生成的密钥安全吗?

用的是浏览器提供的密码学随机源(node-forge 会优先走 crypto.getRandomValues),密钥只在这个页面的内存里,刷新就消失,不会写 localStorage 也不会上传。但正式用途仍建议在本地用 openssl 生成并妥善保管:网页生成适合调试与联调,不适合当生产密钥的长期来源。

能解密 JWT 或者 TLS 流量吗?

RSA 只是这些体系里的一环,具体要看对方怎么用:JWT 的 RS256 是「RSA 签名 + SHA-256」,可以用这里的签名验签配合调试;TLS 用的是完全不同的记录层协议与密钥交换流程,不是拿私钥解一段密文就能还原的。

小提示

  • RSA 能加密的数据有硬上限:2048 位配 PKCS#1 v1.5 最多 245 字节,配 OAEP-SHA256 只有 190 字节。页面会实时显示「已用 X / 最多 Y 字节」,超了直接标红。要加密长文本请用混合加密:AES 加密正文,RSA 只加密那把 AES 密钥
  • 「解不开」十次有九次是填充方式不一致:对方用 OAEP-SHA256 加密,你用 PKCS#1 v1.5 解密必然失败。OAEP 的 SHA-1 与 SHA-256 也互不兼容,这是两个不同的方案,不是可选项
  • 同一条明文每次加密得到的密文都不同,这是填充里带了随机字节,属于正常且必要的设计;但签名是确定性的 —— 同一条消息、同一把私钥、同一个摘要,签出来的结果每次都一样
  • 签名用私钥、验签用公钥,方向与加密正好相反。签名会先把内容哈希再签,所以消息多长都能签,不受 RSA 长度上限限制
  • 别把生产环境的私钥粘到任何在线工具里。这个页面确实不上传,但剪贴板历史、浏览器缓存与截图都可能留痕

同类加密与解密工具