�,
复制它再拿去加密不会得到原数据——请用下面的原始字节。
RSA 加解密在浏览器本地完成公钥加密、私钥解密、私钥签名与公钥验签,并能一键生成 1024~4096 位密钥对。支持 PKCS#1 v1.5 与 OAEP 两种加密填充、PKCS#1 v1.5 与 PSS 两种签名方案、SHA-1/256/384/512 四种摘要,PEM 可按 PKCS#1 或 PKCS#8 输出——联调时对不上,问题基本都落在这几个开关的组合上。
| 用途 | 谁来做 | 谁能验证 |
|---|---|---|
| 加密 | 用公钥加密 | 只有持私钥的人能解开 |
| 签名 | 用私钥签名 | 任何拿到公钥的人都能验证 |
方向搞反是初学者最常见的错误:公钥是公开的,用私钥”加密”等于人人可解,那叫签名,不叫加密。
RSA 单次能处理的明文受密钥模长严格限制:
| 密钥位数 | PKCS#1 v1.5 | OAEP-SHA256 |
|---|---|---|
| 1024 位 | 117 字节 | 62 字节 |
| 2048 位 | 245 字节 | 190 字节 |
| 4096 位 | 501 字节 | 446 字节 |
超过就必须换思路,而不是换更长的密钥:用 AES 加密正文,用 RSA 只加密那把 AES 密钥,再把两段密文一起发出去。这套组合叫混合加密,是所有实际系统的标准做法。
| PEM 头 | 含义 | 常见来源 |
|---|---|---|
BEGIN PUBLIC KEY | PKCS#8 公钥(SPKI) | 通用,Java / Go 首选 |
BEGIN RSA PUBLIC KEY | PKCS#1 公钥 | openssl 传统格式 |
BEGIN PRIVATE KEY | PKCS#8 私钥 | Java / Go 标准库 |
BEGIN RSA PRIVATE KEY | PKCS#1 私钥 | openssl 默认输出 |
BEGIN CERTIFICATE | X.509 证书 | 可直接粘贴,自动提取其中的公钥 |
不带 -----BEGIN----- 头尾的裸 Base64 也能直接粘贴——很多 Java、PHP 项目的配置文件里就是这么存的,工具会自动尝试补齐外壳。若手上只有私钥,点「由私钥推导」就能算出配套公钥。
⚠️ 安全提醒:密钥的生成与使用全部在你的浏览器本地完成,不上传、不联网、不留存,私钥也不会写入本地存储。但请勿粘贴生产环境的真实私钥,这里生成的密钥也仅供学习与联调。
RSA 天生只能加密很短的数据。 上限等于密钥模长减去填充开销:2048 位密钥配 PKCS#1 v1.5 是 245 字节,配 OAEP-SHA256 是 190 字节。正确做法不是换更长的密钥,而是混合加密——用 AES 加密正文,再用 RSA 只加密那把 AES 密钥。所有 HTTPS、支付接口都是这么做的。
新项目一律用 OAEP。 PKCS#1 v1.5 的填充存在已知的选择密文攻击面(Bleichenbacher 攻击),现代密码库都建议弃用;它在本工具保留,是因为国内大量老接口和支付网关仍在用。OAEP 需要额外约定一个摘要算法(通常 SHA-256),两端必须一致,否则解密会直接失败。
是同一把密钥的两种外包装,内容完全等价。PKCS#1 以 -----BEGIN RSA PRIVATE KEY----- 开头,是 openssl 的传统输出;PKCS#8 以 -----BEGIN PRIVATE KEY----- 开头,多包了一层算法标识,Java 和 Go 的标准库通常只认它。本工具两种都能读、都能生成,粘进来不用手动转换。
逐项核对四件事:① 原文是否完全一致,多一个换行或空格都不行;② 公钥是不是签名那把私钥对应的;③ 摘要算法两端是否都是 SHA-256(或都是 SHA-1);④ 签名方案是 PKCS#1 v1.5 还是 PSS。另外注意签名的编码——Base64 和 Hex 别混用,+ / 与 - _(Base64URL)也不是一回事。
因为要在浏览器里用纯 JavaScript 反复做大素数搜索与素性检验,位数每翻一倍,耗时增长远超一倍。2048 位通常几秒内完成,4096 位可能要十几秒到一分钟。除非明确要求,2048 位就够用——它是当前绝大多数场景的行业标准,NIST 建议至少用到 2030 年。生成期间页面不会卡死,但请勿关闭标签页。
不建议。 密钥确实是在你本机浏览器里生成的,不上传也不留存,但生产密钥应当在受控服务器上由 openssl 或 KMS 生成,并且从不离开那台机器。浏览器环境有扩展、剪贴板、屏幕录制等一堆你控制不了的因素。这里生成的密钥请只用于开发、测试和学习。