You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PEM PKCS#8 EC公钥转为DER/原始二进制及逆向转换?

EC公钥格式互转实操指南

先明确你的公钥格式

你提供的PEM公钥是X.509 SubjectPublicKeyInfo格式(不是PKCS#8,PKCS#8多用于私钥,公钥的标准封装格式就是这种),它的ASN.1结构包含了曲线标识和公钥点信息。


1. 从PEM公钥提取原始二进制裸公钥

你通过openssl ec -pubin -pubout -in key.pem -text看到的pub:字段下的十六进制内容,就是带04前缀的非压缩格式原始公钥二进制。要直接导出这个裸二进制:

# 提取十六进制内容并清理格式,再转成二进制文件
openssl ec -pubin -in key.pem -text -noout | grep -A7 "pub:" | tail -n7 | tr -d ' \n:' | xxd -r -p > raw_pub.bin

生成的raw_pub.bin就是你需要的原始二进制公钥(共97字节:1字节非压缩标识04 + 384位曲线对应的2组48字节坐标)。


2. 从原始二进制公钥转回X.509 PEM格式

如果已有原始裸公钥文件(比如raw_pub.bin),要转回你提供的那种PEM格式,需要指定匹配的曲线参数,再封装成标准X.509结构:

# 将原始裸公钥封装为X.509 PEM格式
openssl ec -pubin -inform raw -in raw_pub.bin -outform PEM -out pub.pem -conv_form uncompressed -name secp384r1
  • -conv_form uncompressed:指定公钥为非压缩格式(对应开头的04标识)
  • -name secp384r1:必须和原始公钥使用的曲线一致(你的公钥用的是P-384/secp384r1)

3. 澄清你之前的DER格式误解

你执行openssl ec -pubin -in key.pem -out out.der -outform DER生成的是X.509 DER格式公钥(包含曲线OID和公钥点的完整ASN.1结构),并非裸公钥。如果需要的是这个完整结构的DER,那命令是正确的;如果要裸公钥,用第一步的命令即可。


关于“签名转PEM公钥”的说明

签名是私钥对数据生成的验证凭证,签名本身无法直接转换为公钥——公钥是用来验证签名的,签名里不包含公钥信息。如果是要从签名验证场景中获取公钥,需要依赖对应的证书或原始公钥材料。

内容的提问来源于stack exchange,提问作者Unknown BL4NK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:53:14