Skip to main content
UFOZoo

RSA/ECDSA密钥 SSH/TLS/PEM在线生成器

支持RSA 2048/4096位、ECDSA P-256/P-384/P-521,生成SSH、TLS、JWT密钥对,PEM格式导出。

更新于 2026-08-16

相关工具

功能特性

  • 两种算法模式:RSA(2048/4096 位)和 ECDSA(P-256/P-384/P-521),满足不同加密需求
  • 标准 PEM 输出:公钥导出为 SPKI 格式,私钥导出为 PKCS#8 格式,兼容 OpenSSL 和主流加密库
  • 安全密钥生成:使用 Web Crypto API(crypto.subtle.generateKey)生成密码学安全的随机密钥
  • 一键复制:每条密钥独立复制,附带视觉反馈
  • 保存为 .pem 文件:公钥和私钥分别保存为独立 PEM 文件
  • 生成状态反馈:浏览器计算密钥时显示旋转指示器,让你知道生成正在进行
  • 公钥和私钥以 PEM 格式并排显示,各自带独立的复制和保存按钮
  • 客户端本地生成:密钥在你的设备上生成,私钥永不离开设备

使用方法

  1. 1选择密钥算法:RSA 适用于非对称加密,ECDSA 适用于数字签名和现代应用。
  2. 2选择密钥长度:RSA 可选 2048(默认推荐)或 4096 位;ECDSA 可选 P-256、P-384 或 P-521 曲线。
  3. 3点击生成按钮:工具使用浏览器的 Web Crypto API 创建密码学安全的密钥对。
  4. 4查看 PEM 格式的公钥和私钥。点击复制按钮复制到剪贴板。
  5. 5点击保存按钮保存为 .pem 文件,用于 OpenSSL、SSH 或服务器配置。
  6. 6生成期间按钮会显示加载状态:RSA 2048 位通常需要 2-5 秒,4096 位在慢速设备上可能需要 10-30 秒,ECDSA 一秒内完成。
  7. 7将公钥用于 TLS/SSL 证书:用私钥生成 CSR,然后提交给证书颁发机构。
  8. 8将密钥对用于 JWT 签名:配置认证服务器用私钥签名 Token,分发公钥用于验证。

常见问题

RSA 和 ECDSA 有什么区别?

RSA 是最广泛使用的非对称加密算法,适用于加密、数字签名和密钥交换。兼容性最好但需要较大的密钥(2048-4096 位)。ECDSA(椭圆曲线数字签名算法)在同等安全性下密钥小得多:P-256 与 RSA 3072 安全性相当。ECDSA 签名速度更快,是区块链、JWT、TLS 证书等现代应用的首选。

应该使用什么密钥长度?

RSA 推荐 2048 位(行业标准)。4096 位安全性更高,但密钥生成和加密操作明显变慢。ECDSA 推荐 P-256(secp256r1),兼容性最好。P-384 被某些政府标准要求(NSA Suite B)。P-521 安全性最高但兼容性有限。

PEM 格式是什么,如何使用这些密钥?

PEM 是基于 Base64 编码的标准格式,带标题/结尾行。公钥使用 BEGIN PUBLIC KEY / END PUBLIC KEY(SPKI 格式,RFC 5280),私钥使用 BEGIN PRIVATE KEY / END PRIVATE KEY(PKCS#8 格式,RFC 5208)。这些文件兼容 OpenSSL、OpenSSH、Node.js crypto、Python cryptography、TLS 服务器、JWT 等。

怎么区分哪个是公钥、哪个是私钥?

看 PEM 头即可:公钥以 -----BEGIN PUBLIC KEY----- 开头(SPKI 格式),私钥以 -----BEGIN PRIVATE KEY----- 开头(PKCS#8 格式)。OpenSSH 系统中 id_rsa 是私钥、id_rsa.pub 是公钥。一个常见陷阱:有些工具导出的私钥头是 -----BEGIN RSA PRIVATE KEY-----,这是较老的 PKCS#1 格式,同样属于私钥。标着 PRIVATE 的内容绝不能外传。另外注意,私钥永远能推导出公钥,反过来不行。

这里能生成 Ed25519 密钥对吗?

不能。本工具只生成 RSA 和 ECDSA。Ed25519 是另一条曲线,浏览器的 Web Crypto API 目前不向网页开放。需要 Ed25519 请在命令行使用 ssh-keygen -t ed25519,或用 OpenSSL(openssl genpkey -algorithm ED25519)。如果你只需要签名且目标系统支持,ECDSA P-256 是本工具能生成的最接近的替代。

可以将这些密钥导入其他系统吗?

可以。PEM 格式被普遍支持。Node.js 用 crypto.createPublicKey() 和 crypto.createPrivateKey()。Python 用 cryptography 库的 load_pem_private_key() 和 load_pem_public_key()。OpenSSL 用 openssl pkey -in key.pem。JWT 可用公钥验证签名、私钥签名。

为什么密钥生成有时很慢?

RSA 密钥生成需要寻找大素数,2048 位需要几秒,4096 位需要更久。这是正常现象,说明真的在做随机数生成。ECDSA 通常快得多(一秒以内),因为它不需要素数搜索。

为什么每次生成的密钥对都不一样?

因为密钥是随机的,这正是它的意义。每次生成都会抽取全新的随机密钥材料,即使算法和长度相同,生成的密钥对也会不同。决定使用的密钥必须保存一次;用旧密钥对加密、签名或配置的内容,换新密钥后都无法继续使用。不存在「重新生成相同密钥」的办法:私钥一旦丢失,这对密钥就永久作废。

这些密钥可以用于 SSH 认证吗?

RSA PEM 密钥经过格式转换后可配合 SSH 使用。提取 SSH 公钥格式:ssh-keygen -f public-key.pem -i -m PKCS8。私钥可能需要转换为 OpenSSH 格式:ssh-keygen -p -m PEM -f private-key.pem。ECDSA P-256 密钥原生支持 OpenSSH 6.5+。

PKCS#8 和 SPKI PEM 格式有什么区别?

PKCS#8(RFC 5208)是私钥的标准格式,将密钥数据与算法标识打包。SPKI(RFC 5280)是公钥的标准格式,包含算法和密钥数据。两者都被 OpenSSL、Node.js、Python、Java、Go 原生支持。

为什么我的私钥开头是 BEGIN PRIVATE KEY 而不是 BEGIN RSA PRIVATE KEY?

两个头代表不同格式。-----BEGIN PRIVATE KEY----- 是 PKCS#8(RFC 5208),也是本工具导出的现代标准;-----BEGIN RSA PRIVATE KEY----- 是较老的 PKCS#1(RFC 8017)布局。OpenSSL 3.x、Node.js、Python、Java、Go 都原生支持 PKCS#8。如果旧系统坚持要求 PKCS#1,可以用 openssl rsa -in key.pem -out key.pkcs1.pem 转换。另外在 OpenSSH 场景下经常有人问 id_rsa是公钥还是私钥:id_rsa 是私钥,id_rsa.pub 才是公钥。

为什么私钥一旦丢失就无法恢复?

公钥可以从私钥推导,反过来在计算上不可行:这正是非对称加密(RSA/ECDSA)的基础:RSA 私钥由两个大素数构造,无法从公钥反推。私钥一旦丢失,这对密钥就永久作废,任何用它加密、签名或配置的内容都必须用新的密钥对重新处理。生成后应立即备份私钥(建议加密保存)。