编码加密 · 非对称加密

RSA 密钥对

生成 RSA 公私钥/PEM/PKCS#8

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 126 次使用
Web Crypto RSA · 浏览器本地生成 · 密钥不上传 / 不缓存
生成参数key parameters
密钥长度modulus bits
用途usage
Hash 算法hash
· 公钥导出为 SPKI / X.509,私钥导出为 PKCS#8,均为标准 PEM(Base64 每行 64 字符)。
· 4096 位生成可能需数秒,请耐心等待。
密钥对结果PEM output
点击「生成密钥对」
公钥 / 私钥 PEM 将显示在此
就绪 · 选择参数后点击生成
第一节

关于本工具

About

当运维人员需要为 SSH 或 SSL 配置生成密钥对,却记不清 `openssl` 各参数含义时,这个工具直接解决输入字段与输出格式的对应问题。选择 2048 或 4096 位长度,指定 PEM 或 PKCS#8 格式,一次生成即得私钥与公钥文本。密钥生成在服务端完成,传输使用 HTTPS 加密——生成后建议立即下载,页面不保留任何副本。

使用场景

壹

API 密钥签发

后端开发者在给第三方服务签发 JWT 时,需要生成 2048 位 RSA 私钥用于签名,公钥交给对方验签。手动用 OpenSSL 命令行容易写错参数,生成的 PEM 格式不标准导致验签失败。本工具直接输出 PKCS#8 格式的 PEM 私钥和公钥,复制粘贴即可配置到代码中,避免因格式问题反复调试。

贰

SSH 免密登录

运维工程师要为 50 台服务器配置密钥对登录,手工生成 rsa 密钥时需指定位数和注释,不同机器生成的密钥格式不一致。用本工具统一生成 4096 位 RSA 密钥对,公钥内容直接粘贴到服务器 authorized_keys 文件,私钥保存到本地 .ssh 目录,确保所有服务器使用相同强度的密钥,避免弱密钥被暴力破解。

叁

代码签名证书

独立开发者需要为 Windows 驱动程序申请代码签名证书,CA 要求提供 CSR 文件。生成 CSR 需要先有 RSA 私钥,传统做法是用 OpenSSL 生成,但参数复杂容易出错。本工具生成私钥后,开发者将私钥内容复制到 OpenSSL 配置文件中生成 CSR,省去记忆繁琐命令行参数的时间,确保私钥长度满足 CA 的 2048 位要求。

肆

HTTPS 证书部署

网站管理员为 Nginx 配置 SSL 证书时,需要先生成 RSA 私钥再提交 CSR 给 Let's Encrypt。手动生成时若位数选错(如用了 1024 位而非 2048 位),证书申请会被拒绝。本工具默认输出 2048 位私钥,符合现代浏览器安全要求,生成的 PEM 格式可直接用于 Nginx 配置,避免因位数不足导致浏览器报不安全警告。

伍

Git 提交签名

开发者需要为 Git 提交添加 GPG 签名以验证身份,但 GPG 工具生成密钥对流程繁琐,且密钥格式不兼容 SSH。本工具生成 RSA 私钥后,开发者将其转换为 GPG 可导入的格式,或直接使用 SSH 密钥签名。生成的 4096 位密钥强度高于 GPG 默认的 2048 位,确保提交记录无法被伪造。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「密钥长度」下拉框中选择 2048 或 4096 位,位数越高越安全但生成稍慢
  2. 2点击「生成密钥对」按钮,页面立即显示 PEM 格式的公钥与私钥文本
  3. 3勾选「PKCS#8 格式」复选框,私钥区域自动切换为 PKCS#8 编码的私钥内容
  4. 4点击公钥或私钥区域旁的「复制」图标,对应文本即写入剪贴板
  5. 5点击「下载私钥」或「下载公钥」按钮,浏览器自动保存为 .pem 文件

输入输出示例

输入输出说明
2048 位密钥,格式 PEM,密码短语为空-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA... -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... -----END PUBLIC KEY-----常规:2048 位是当前推荐的最小安全长度,PEM 格式最通用,输出包含公私钥两部分
4096 位密钥,格式 PKCS#8,密码短语为空-----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQ... -----END PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... -----END PUBLIC KEY-----常规:4096 位高安全场景(如 CA 根证书),PKCS#8 格式是标准私钥封装,输出长度显著大于 2048 位
1024 位密钥,格式 PEM,密码短语为空-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQ... -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ... -----END PUBLIC KEY-----边界:1024 位已不被推荐用于生产环境(NIST 建议 2048+),但工具仍支持生成,输出较短
512 位密钥,格式 PEM,密码短语为空-----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBAK... -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB... -----END PUBLIC KEY-----边界:512 位在现代硬件下可在数分钟内被破解,工具允许生成但输出极短,用于演示或测试
2048 位密钥,格式 PKCS#8,密码短语为 'MyStr0ngP@ss!'-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI... -----END ENCRYPTED PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... -----END PUBLIC KEY-----易错:密码短语不为空时,私钥输出为 'ENCRYPTED PRIVATE KEY' 格式,公钥仍为明文;密码短语需记住否则私钥不可用
2048 位密钥,格式 PEM,密码短语为 '123456'-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC,1A2B3C4D5E6F7890 MIIEpAIBAAKCAQEA... -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... -----END PUBLIC KEY-----易错:PEM 格式带密码短语时,输出头部包含 'Proc-Type' 和 'DEK-Info' 行,加密算法为 AES-256-CBC;弱密码(如 '123456')工具不阻止但安全风险高
2048 位密钥,格式 DER(二进制),密码短语为空(二进制数据,无法以文本显示,工具提供下载链接或 Base64 编码)边界:DER 格式输出为二进制,浏览器中无法直接展示文本,工具需提供下载或 Base64 编码选项

常见错误对照

1.密钥长度选了非标准值,生成失败或极慢

✗ 错误密钥长度填 300
✓ 修复密钥长度填 2048

RSA 密钥长度必须是 2 的幂次倍数(如 1024、2048、4096),且小于 2048 的密钥已被 NIST 弃用;300 不是有效长度,工具会拒绝生成或陷入无限循环。

2.私钥密码只用在 PKCS#8,却对 PEM 也填了密码

✗ 错误导出格式选「PEM(无加密)」但密码框填了 123456
✓ 修复导出格式选「PEM(无加密)」时密码框留空

传统 PEM 格式(BEGIN RSA PRIVATE KEY)本身不支持密码加密;密码仅对 PKCS#8 加密私钥(BEGIN ENCRYPTED PRIVATE KEY)生效。填了密码但选 PEM,密码会被忽略。

3.公钥和私钥混淆,贴错到服务器配置

✗ 错误把私钥内容(-----BEGIN RSA PRIVATE KEY-----)贴到 SSH authorized_keys 文件
✓ 修复只复制公钥内容(ssh-rsa AAAA... 或 -----BEGIN PUBLIC KEY-----)

公钥以 ssh-rsa 或 BEGIN PUBLIC KEY 开头,私钥以 BEGIN RSA PRIVATE KEY 开头。贴错会导致 SSH 服务拒绝连接或权限验证失败。

4.复制时漏掉首尾标记行,导致解析失败

✗ 错误只复制中间 Base64 部分,省略 -----BEGIN RSA PRIVATE KEY----- 和 -----END RSA PRIVATE KEY-----
✓ 修复完整复制从 BEGIN 行到 END 行的全部内容,包括换行

OpenSSL 等工具依赖标记行来识别密钥格式;缺少标记行会报「unable to load key」「no start line」错误。

5.私钥文件权限设置过宽,被其他用户读取

✗ 错误将私钥文件权限设为 644(即 chmod 644 id_rsa)
✓ 修复私钥文件权限设为 600(即 chmod 600 id_rsa)

SSH 客户端会拒绝加载权限过宽的私钥文件(要求 600 或更严格),否则报「Permissions 0644 for 'id_rsa' are too open」。

6.用 1024 位密钥以为足够安全,实际已被破解

✗ 错误选择 1024 位密钥长度用于生产环境
✓ 修复至少选择 2048 位,推荐 4096 位

NIST SP 800-57 自 2013 年起已弃用 1024 位 RSA;2019 年有研究团队用约 200 万美元成本成功分解 1024 位密钥。

7.生成后未保存私钥就关闭页面,密钥永久丢失

✗ 错误生成密钥对后直接关闭浏览器标签页
✓ 修复生成后立即下载私钥文件,并备份到安全位置

该工具为纯前端生成,私钥仅存在于浏览器内存中;关闭页面后内存释放,无法恢复。

第三节

工作原理

How It Works

核心公式

n = p × q, φ(n) = (p-1)(q-1), e × d ≡ 1 (mod φ(n))

变量说明

  • p, q两个大质数,随机生成
  • n模数,公钥和私钥的一部分
  • φ(n)欧拉函数值,用于计算私钥指数
  • e公钥指数,常用 65537
  • d私钥指数,e 模 φ(n) 的乘法逆元

示例

生成 512 位密钥对:随机取 p=61, q=53 → n=61×53=3233, φ(n)=60×52=3120。选 e=65537,计算 d 满足 65537×d ≡ 1 mod 3120,得 d=2753。公钥为 (n=3233, e=65537),私钥为 (n=3233, d=2753)。

选择密钥长度选择输出格式服务端生成校验密钥对展示公私钥
用户输入 服务端处理 输出结果
第五节

常见问题

Q & A
问生成的私钥和公钥文件怎么保存?直接复制粘贴到文本文件里就行吗?+
答

可以。本工具生成的 PEM 格式密钥就是纯文本,直接复制全部内容(包括 -----BEGIN RSA PRIVATE KEY----- 那两行)粘贴到 .pem 或 .key 文件里保存即可。注意私钥文件权限要设为 600(仅所有者可读写),公钥可以公开。如果粘贴后报格式错误,检查首尾行是否完整、有没有多余空行或空格。

问RSA 密钥对生成后,公钥和私钥怎么配对验证?+
答

本工具结果区会同时输出公钥和私钥,它们本身就是一对。要验证配对,可以用 OpenSSL 命令:openssl rsa -in private.pem -pubout -out pub_check.pem,然后对比输出的公钥是否和工具生成的公钥一致。或者用 openssl pkeyutl -verify 做签名验证测试。如果一致说明配对正确,否则可能是复制时丢了字符。

问为什么我生成的私钥开头是 -----BEGIN PRIVATE KEY----- 而不是 -----BEGIN RSA PRIVATE KEY-----?+
答

这是 PKCS#8 格式和传统格式的区别。本工具默认输出 PKCS#8 格式(BEGIN PRIVATE KEY),兼容性更好,大多数现代应用(如 Java、Python cryptography 库、OpenSSL 1.1+)都推荐用 PKCS#8。如果你需要传统格式(BEGIN RSA PRIVATE KEY),可以在工具选项里切换格式。两种格式内容等价,只是容器不同。

问生成的密钥对能不能用在 SSH 登录?+
答

可以,但需要转换。本工具生成的是 PEM 格式的 RSA 密钥对,SSH 通常使用 OpenSSH 格式(公钥以 ssh-rsa AAAA... 开头)。转换方法:用 ssh-keygen -i -m PKCS8 -f private.pem 导入私钥,然后 ssh-keygen -y -f private.pem 导出 OpenSSH 公钥。或者直接用本工具生成后,手动将公钥内容复制到 ~/.ssh/authorized_keys 里也可以工作(部分旧版 SSH 需要转换)。

问密钥长度选 2048 还是 4096?有什么区别?+
答

2048 位是当前安全标准最低要求,性能好,绝大多数场景(SSL 证书、SSH、API 签名)都够用。4096 位安全冗余更高,但生成时间慢约 4 倍,加解密运算也慢 2-3 倍。除非是政府、金融等高安全等级要求,否则 2048 位足够。注意:1024 位已被认为不安全,不要选。

问私钥泄露了怎么办?这个工具能找回吗?+
答

私钥一旦泄露,没有找回方法,必须立即作废并重新生成一对新密钥。本工具不保存任何密钥(所有计算在服务器内存中完成,生成后即丢弃),所以也无法帮你找回。正确做法:重新生成新密钥对,更新所有使用旧公钥的地方(服务器、应用配置),并确保新私钥存放在安全位置,建议加密存储。

问生成的密钥对能在微信小程序里用吗?+
答

微信小程序不支持直接加载 PEM 格式的 RSA 私钥。需要将 PEM 转换为小程序支持的格式:私钥转成 PKCS#8 纯文本(本工具默认就是这个),公钥去掉头尾和换行变成一行 Base64 字符串。小程序 wx.request 的加密接口要求使用 PKCS#1 填充模式,注意本工具生成的密钥默认使用 PKCS#1.5 填充,可以匹配。

问为什么我用同一个工具不同浏览器生成的密钥对不一样?+
答

这是正常的。RSA 密钥对生成依赖随机数,每次生成的密钥对都是唯一且不同的,即使参数相同(同长度、同格式)。如果两次生成结果一样反而说明随机数有问题,不安全。本工具使用服务端加密安全随机数(Go crypto/rand),每次生成的密钥对都是全新的。

问我想用生成的公钥给别人加密文件,该怎么做?+
答

RSA 公钥加密文件不推荐直接加密大文件(性能差,有长度限制)。标准做法:生成一个随机对称密钥(如 AES-256),用该密钥加密文件,然后用 RSA 公钥加密这个对称密钥。实际命令示例:openssl rand -out key.bin 32 && openssl enc -aes-256-cbc -in file.txt -out file.enc -pass file:key.bin && openssl rsautl -encrypt -inkey public.pem -pubin -in key.bin -out key.enc。解密时反过来。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭