PKCS#1 与 PKCS#8 · 公钥和私钥

私钥与公钥格式转换:PKCS#1 和 PKCS#8

在 PKCS#1 和 PKCS#8 之间转换私钥或公钥。把 PEM 重写成另一台服务器、负载均衡器或云 API 所需的结构。识别和转换都在浏览器中完成。

仅在浏览器中转换 · 不会上传你的密钥

粘贴或上传公钥或私钥。

识别到的 PEM 标头会填入密钥类型和当前格式。请选择目标格式。如果无法识别当前格式,会把它视为另一种格式。转换在此标签页中进行,清除或关闭页面后密钥会被丢弃。

接受未加密的 .key、.pem 或 .pub 文件。

识别到的 PEM 标头会填入密钥类型。请选择目标格式。

转换后的密钥将显示在这里

粘贴一个 PEM 密钥并选择目标格式。已经是该格式的密钥会原样返回。

密钥编码

同一密钥,不同的封装。

云 API、Web 服务器或较旧的工具可能只接受一种 PEM 标头。转换编码后,你可以直接安装已有的密钥,而不必生成新的密钥对并重新签发证书。

匹配所需的 PEM 标头

在 BEGIN PRIVATE KEY 与 RSA PRIVATE KEY 或 EC PRIVATE KEY 之间互相转换。

同样支持公钥

在 BEGIN PUBLIC KEY 和 BEGIN RSA PUBLIC KEY 之间转换 RSA 公钥。

密钥材料保留在本地

解析和重写都在当前浏览器标签页中完成。密钥不会被上传。

PKCS#1 与 PKCS#8

如何转换密钥格式。

使用完整的 PEM,包括 BEGIN 和 END 行。识别到标头后会填入密钥类型和当前格式。请自行选择目标格式。

  1. 01

    添加密钥

    粘贴 PEM,或上传未加密的 .key、.pem 或 .pub 文件。

  2. 02

    选择目标格式

    选择 PKCS#1 或 PKCS#8。如果密钥已经是该格式,结果仍是同一份 PEM。

  3. 03

    复制或下载结果

    输出只保留在此标签页中。请用与原始密钥相同的访问控制来保存它。

PEM 标头

哪种标头对应哪种格式。

PKCS#8

BEGIN PRIVATE KEY
BEGIN PUBLIC KEY

私钥使用 PrivateKeyInfo。公钥使用 SubjectPublicKeyInfo,此转换器把它视为 PKCS#8 公钥形式。

PKCS#1

BEGIN RSA PRIVATE KEY
BEGIN EC PRIVATE KEY
BEGIN RSA PUBLIC KEY

EC PRIVATE KEY 是 SEC1 编码。本页写出的唯一 PKCS#1 公钥是 RSA PUBLIC KEY。

格式检测

转换器如何选择转换方向。

它会先读取 PEM 标签。识别到一个标头后,会填入密钥类型和当前格式。由你选择结果应为 PKCS#1 还是 PKCS#8。

缺少标签、标头被截断,或同一个输入框中有两把密钥时,无法确定当前格式。选择目标格式后,转换器会把密钥视为另一种格式。已经是目标格式的密钥会原样返回。

转换会改变什么

  • The PEM header and ASN.1 wrapper
  • Line wrapping of the Base64 body
  • Where an EC curve identifier is stored

转换不会生成新的密钥对,不会解密口令,也不能证明证书与密钥匹配。

如何使用 OpenSSL 在 PKCS#1 和 PKCS#8 之间转换。

如果密钥已加密,或策略不允许使用浏览器工具,请在受信任的计算机上运行这些命令。

私钥 PKCS#1 转 PKCS#8

openssl pkcs8 -topk8 -nocrypt \
  -in private-key.pem -out private-key-pkcs8.pem

RSA 私钥 PKCS#8 转 PKCS#1

openssl rsa -in private-key.pem \
  -out private-key-pkcs1.pem

EC 私钥 PKCS#8 转 SEC1

openssl ec -in private-key.pem \
  -out private-key-sec1.pem

RSA 公钥 SPKI 转 PKCS#1

openssl rsa -pubin -in public-key.pem \
  -RSAPublicKey_out -out public-key-pkcs1.pem

支持的格式与限制。

粘贴或上传一份未加密的 PEM。私钥可以是 PKCS#8、RSA PKCS#1 或 EC SEC1。RSA 公钥可以是 SubjectPublicKeyInfo 或 RSAPublicKey。支持的 EC 曲线与证书已使用的命名曲线一致,包括 P-256、P-384 和 P-521。

加密的私钥、证书、CSR 和 PKCS#12 包不在本页范围内。请用 OpenSSL 处理这些容器,如果仍需要不同的 PEM 标头,再把提取出的密钥拿到这里转换。

当检测失败时。

如果文本没有 PEM 边界、边界被截断,或同时包含公钥和私钥,就无法识别当前格式。选择目标格式后,转换器会假定密钥使用另一种格式。标头无法识别密钥类型时,请自行设置。

手动选择错误时会失败,不会写出密钥。请检查原始标头,或先用 OpenSSL 移除口令后再试。

相关密钥工具

CSR 与私钥匹配工具

提交请求前,确认 CSR 和私钥属于同一密钥对。

Check CSR & key

CSR 生成器

如果需要新的密钥对而不是新的编码,请在本地创建新的 CSR 和私钥。

Generate CSR

PKCS 转换常见问题

PKCS#1 与 PKCS#8 的常见问题。

PKCS#1 和 PKCS#8 有什么区别?

PKCS#8 是通用的私钥封装,写为 BEGIN PRIVATE KEY。这里的 PKCS#1 指特定算法的形式:BEGIN RSA PRIVATE KEY,或 SEC1 椭圆曲线密钥的 BEGIN EC PRIVATE KEY。公钥的通用形式是 SubjectPublicKeyInfo(BEGIN PUBLIC KEY)。本页把它视为 PKCS#8 公钥。PKCS#1 公钥是 BEGIN RSA PUBLIC KEY。

把私钥粘贴到此转换器是否安全?

转换在浏览器本地进行。密钥不会发送到我们的服务器、不会被保存,也不会写入 URL。完成后请清空表单或关闭标签页。生产环境的密钥请遵循组织的密钥处理策略。

转换器支持 RSA 和 EC 密钥吗?

私钥可以是 RSA 或 ECDSA,包括证书使用的 P-256、P-384 和 P-521 曲线。公钥转换针对 RSA。椭圆曲线公钥已经使用 SubjectPublicKeyInfo,没有 PKCS#1 PEM 形式。

可以转换加密的私钥吗?

不会。本页不要求也不解密口令。BEGIN ENCRYPTED PRIVATE KEY,以及带有 Proc-Type: 4,ENCRYPTED 的 PEM 都会被拒绝。请使用本页的 OpenSSL 命令,或在受信任的计算机上创建临时的未加密副本,用完后立即删除。

无法识别格式时会怎样?

标准 PEM 标头会填入密钥类型和当前格式。由你选择目标格式。如果标头缺失、被截断,或粘贴了不止一个密钥,请自行设置密钥类型。此时会把当前格式视为另一种 PKCS 格式。已经是目标格式的密钥会原样返回。

转换会改变密钥对吗?

不会。PKCS#1 和 PKCS#8 是同一份密钥材料的两种编码。模数、指数和曲线参数保持不变,改变的只是 PEM 封装。