在浏览器里完成 RSA 的整套操作:生成 1024 / 2048 / 4096 位密钥对,导入已有的 PEM 公钥私钥,用公钥加密、私钥解密,或用私钥签名、公钥验签。加密支持 PKCS#1 v1.5 与 OAEP 两种填充,OAEP 的摘要可选 SHA-256 / SHA-1 / SHA-512;签名摘要同样可选,签名与密文都能用 Base64 或 Hex 表示。RSA 是非对称算法里最普及的一个,接口联调、JWT/证书相关排查、给一段配置做临时加密时都用得上。私钥与明文全程留在浏览器内存,不会上传。
工具界面在页面加载完成后显示在本段下方,可以直接使用。所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。
在浏览器里完成 RSA 的整套操作:生成 1024 / 2048 / 4096 位密钥对,导入已有的 PEM 公钥私钥,用公钥加密、私钥解密,或用私钥签名、公钥验签。加密支持 PKCS#1 v1.5 与 OAEP 两种填充,OAEP 的摘要可选 SHA-256 / SHA-1 / SHA-512;签名摘要同样可选,签名与密文都能用 Base64 或 Hex 表示。RSA 是非对称算法里最普及的一个,接口联调、JWT/证书相关排查、给一段配置做临时加密时都用得上。私钥与明文全程留在浏览器内存,不会上传。
输入:
在「密钥对」生成 2048 位密钥,切到「加密解密」,填充 PKCS#1 v1.5,明文填「用 RSA 公钥加密这句话」
输出:
256 字节密文(Base64 后 344 个字符);点「拿去解密」可以原样还原明文
同一条明文每次加密的密文都不同(填充里有随机字节),但签名是确定性的:同一消息 + 同一私钥 + 同一摘要每次都签出同样的结果。
RSA 的输出长度恒等于密钥长度:1024 位固定 128 字节、2048 位固定 256 字节、4096 位固定 512 字节,与明文多长无关。页面在解密前会检查这一点,长度对不上会直接告诉你「这段不是用这把密钥加密的」,而不是抛一句英文报错。
新系统选 OAEP。PKCS#1 v1.5 在近二十年里被反复证明存在填充预言攻击(Bleichenbacher 类),只是因为历史系统太多才还在用。两者互不兼容:选了 OAEP 就必须和对方确认摘要算法,SHA-1 与 SHA-256 是两个不同方案。
多半是格式差异而不是密钥有问题。公钥可能是 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 生成并妥善保管:网页生成适合调试与联调,不适合当生产密钥的长期来源。
RSA 只是这些体系里的一环,具体要看对方怎么用:JWT 的 RS256 是「RSA 签名 + SHA-256」,可以用这里的签名验签配合调试;TLS 用的是完全不同的记录层协议与密钥交换流程,不是拿私钥解一段密文就能还原的。