编码加密 · 非对称加密

RSA 密钥对

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

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 62 次使用
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关闭