RSA 加解密与签名验签

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

工具界面在页面加载完成后显示在本段下方,可以直接使用。所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。

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 用的是完全不同的记录层协议与密钥交换流程,不是拿私钥解一段密文就能还原的。

相关工具

同类加密与解密工具

查看全部加密与解密工具