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 / 十六进制输出,验签给出明确的「有效 / 无效」结论。
使用步骤
选长度与用途后点生成;加密与签名用途不同,需要两者时本页会生成两对密钥。
生成结果可直接「填入公钥区 / 私钥区」,省去复制粘贴。
短内容走纯 RSA-OAEP,超长内容自动走混合加密;签名选好算法后即可得到签名串。
用「试解」与「去验签」把结果搬回输入区,确认链路前后端一致。
适用场景
常见问题
为什么加密稍长一点的内容就报「超过 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。