RSA 在线加密解密与密钥对生成

浏览器里生成 2048 / 3072 / 4096 位密钥对并导出 PEM,用公钥加密、私钥解密或验签;超长内容自动改走 AES-GCM 混合加密。

功能特性

生成密钥对

本地生成 2048 / 3072 / 4096 位 RSA 密钥对,导出标准 SPKI 公钥与 PKCS#8 私钥 PEM。

公钥加密私钥解密

RSA-OAEP + SHA-256,并在页面上直接算出当前的单次加密长度上限(2048 位为 190 字节)。

超长内容混合加密

超过上限时自动改用 AES-256-GCM 加密正文、RSA-OAEP 只包裹会话密钥,与 TLS / JWE 的做法一致。

签名与验签

支持 RSASSA-PKCS1-v1_5 与 RSA-PSS,签名可用 Base64 / Base64URL / 十六进制输出,验签给出明确的「有效 / 无效」结论。

使用步骤

01生成密钥对

选长度与用途后点生成;加密与签名用途不同,需要两者时本页会生成两对密钥。

02一键填入工作区

生成结果可直接「填入公钥区 / 私钥区」,省去复制粘贴。

03加密或签名

短内容走纯 RSA-OAEP,超长内容自动走混合加密;签名选好算法后即可得到签名串。

04自验一遍

用「试解」与「去验签」把结果搬回输入区,确认链路前后端一致。

适用场景

给配置文件加密后交付验证后端 RSA-OAEP 填充实现本地生成测试环境密钥对签发与校验许可码签名排查 RSA 长度上限报错理解混合加密是如何工作的

常见问题

为什么加密稍长一点的内容就报「超过 190 字节」?

RSA 是分组加密,单次可加密长度 = 模长 − 2×哈希长度 − 2。2048 位密钥配 SHA-256 时是 256 − 64 − 2 = 190 字节;3072 位是 318 字节,4096 位是 446 字节。这跟工具无关,是算法本身的限制,页面上会实时显示当前上限。超过时本页会自动改为混合加密。

混合加密安全吗?看起来绕了一圈。

这是工程上的标准做法,TLS、PGP、JWE 都是这么做的:正文用 AES-256-GCM 加密(快、无长度限制),只有那把随机的 AES 会话密钥用 RSA-OAEP 包裹。纯 RSA 逐段拼接既慢、又受长度限制,还会因为密文膨胀带来额外开销。信封里 alg 字段写作 RSA-OAEP-256+A256GCM,便于识别。

生成的密钥能用在别处吗?

可以。导出的是标准 PEM:公钥是 SPKI(-----BEGIN PUBLIC KEY-----),私钥是 PKCS#8(-----BEGIN PRIVATE KEY-----),openssl、Java、Go、Node、Python 都能直接加载。私钥请自行保存——本页不做任何存储,刷新即丢失。

一个密钥对能同时用来加密和签名吗?

在本工具里不能,这是 WebCrypto 的设计:算法与用途在导入 / 生成密钥时就绑定好了,RSA-OAEP 的密钥无法参与签名运算(反过来也一样)。所以「用途」选择「两者都要」时会生成两对密钥,并分别标注用途。若你手上只有一把 openssl 生成的通用密钥,导入后按用途选择对应算法即可,多数库能自动适配。

RSASSA-PKCS1-v1_5 和 RSA-PSS 怎么选?

新系统优先 RSA-PSS,它有可证明的安全性且支持随机化填充;RSASSA-PKCS1-v1_5 兼容性最广,几乎所有已有系统都支持。关键约束是:验签必须使用与签名时相同的算法,两者签名长度相同(都是模长字节数)却互不兼容,本页会在长度不符或算法不匹配时直接提示,而不是只回一句「验签失败」。

私钥会上传服务器吗?

不会。密钥生成、加密解密与签名验签全部在浏览器内由 WebCrypto 完成,私钥不随请求发出,页面也不写 localStorage / Cookie。

相关工具