API 密钥签发
后端开发者在给第三方服务签发 JWT 时,需要生成 2048 位 RSA 私钥用于签名,公钥交给对方验签。手动用 OpenSSL 命令行容易写错参数,生成的 PEM 格式不标准导致验签失败。本工具直接输出 PKCS#8 格式的 PEM 私钥和公钥,复制粘贴即可配置到代码中,避免因格式问题反复调试。
当运维人员需要为 SSH 或 SSL 配置生成密钥对,却记不清 `openssl` 各参数含义时,这个工具直接解决输入字段与输出格式的对应问题。选择 2048 或 4096 位长度,指定 PEM 或 PKCS#8 格式,一次生成即得私钥与公钥文本。密钥生成在服务端完成,传输使用 HTTPS 加密——生成后建议立即下载,页面不保留任何副本。
后端开发者在给第三方服务签发 JWT 时,需要生成 2048 位 RSA 私钥用于签名,公钥交给对方验签。手动用 OpenSSL 命令行容易写错参数,生成的 PEM 格式不标准导致验签失败。本工具直接输出 PKCS#8 格式的 PEM 私钥和公钥,复制粘贴即可配置到代码中,避免因格式问题反复调试。
运维工程师要为 50 台服务器配置密钥对登录,手工生成 rsa 密钥时需指定位数和注释,不同机器生成的密钥格式不一致。用本工具统一生成 4096 位 RSA 密钥对,公钥内容直接粘贴到服务器 authorized_keys 文件,私钥保存到本地 .ssh 目录,确保所有服务器使用相同强度的密钥,避免弱密钥被暴力破解。
独立开发者需要为 Windows 驱动程序申请代码签名证书,CA 要求提供 CSR 文件。生成 CSR 需要先有 RSA 私钥,传统做法是用 OpenSSL 生成,但参数复杂容易出错。本工具生成私钥后,开发者将私钥内容复制到 OpenSSL 配置文件中生成 CSR,省去记忆繁琐命令行参数的时间,确保私钥长度满足 CA 的 2048 位要求。
网站管理员为 Nginx 配置 SSL 证书时,需要先生成 RSA 私钥再提交 CSR 给 Let's Encrypt。手动生成时若位数选错(如用了 1024 位而非 2048 位),证书申请会被拒绝。本工具默认输出 2048 位私钥,符合现代浏览器安全要求,生成的 PEM 格式可直接用于 Nginx 配置,避免因位数不足导致浏览器报不安全警告。
开发者需要为 Git 提交添加 GPG 签名以验证身份,但 GPG 工具生成密钥对流程繁琐,且密钥格式不兼容 SSH。本工具生成 RSA 私钥后,开发者将其转换为 GPG 可导入的格式,或直接使用 SSH 密钥签名。生成的 4096 位密钥强度高于 GPG 默认的 2048 位,确保提交记录无法被伪造。
| 输入 | 输出 | 说明 |
|---|---|---|
| 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密钥长度填 2048RSA 密钥长度必须是 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.生成后未保存私钥就关闭页面,密钥永久丢失
生成密钥对后直接关闭浏览器标签页生成后立即下载私钥文件,并备份到安全位置该工具为纯前端生成,私钥仅存在于浏览器内存中;关闭页面后内存释放,无法恢复。
n = p × q, φ(n) = (p-1)(q-1), e × d ≡ 1 (mod φ(n))
p, q两个大质数,随机生成n模数,公钥和私钥的一部分φ(n)欧拉函数值,用于计算私钥指数e公钥指数,常用 65537d私钥指数,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)。
可以。本工具生成的 PEM 格式密钥就是纯文本,直接复制全部内容(包括 -----BEGIN RSA PRIVATE KEY----- 那两行)粘贴到 .pem 或 .key 文件里保存即可。注意私钥文件权限要设为 600(仅所有者可读写),公钥可以公开。如果粘贴后报格式错误,检查首尾行是否完整、有没有多余空行或空格。
本工具结果区会同时输出公钥和私钥,它们本身就是一对。要验证配对,可以用 OpenSSL 命令:openssl rsa -in private.pem -pubout -out pub_check.pem,然后对比输出的公钥是否和工具生成的公钥一致。或者用 openssl pkeyutl -verify 做签名验证测试。如果一致说明配对正确,否则可能是复制时丢了字符。
这是 PKCS#8 格式和传统格式的区别。本工具默认输出 PKCS#8 格式(BEGIN PRIVATE KEY),兼容性更好,大多数现代应用(如 Java、Python cryptography 库、OpenSSL 1.1+)都推荐用 PKCS#8。如果你需要传统格式(BEGIN RSA PRIVATE KEY),可以在工具选项里切换格式。两种格式内容等价,只是容器不同。
可以,但需要转换。本工具生成的是 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 位是当前安全标准最低要求,性能好,绝大多数场景(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。解密时反过来。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。