如何通过OpenSSL从HEX格式ED25519私钥正确生成公钥?
解决HEX格式ED25519私钥重新生成公钥的问题
你遇到的错误原因是:直接转换的是裸ED25519私钥(32字节),但OpenSSL的pkey命令默认期望符合PKCS#8标准的DER格式密钥,而非原始私钥字节,因此读取失败。以下是两种可行的解决方法:
方法一:将裸私钥转为PKCS#8格式后读取
- 先去除HEX字符串中的冒号,得到纯HEX格式:
hex_clean=$(echo $hex | tr -d ':')
- 将纯HEX转换为二进制裸私钥文件:
echo $hex_clean | xxd -r -ps > ed25519_raw.priv
- 用OpenSSL将裸私钥转为PKCS#8标准的DER格式:
openssl pkcs8 -topk8 -inform raw -in ed25519_raw.priv -outform der -nocrypt -out ed25519_pkcs8.der
- 读取该PKCS#8密钥并查看公钥:
openssl pkey -inform der -in ed25519_pkcs8.der -noout -text
若需导出公钥文件,可执行:
openssl pkey -inform der -in ed25519_pkcs8.der -pubout -out ed25519.pub
方法二:直接从裸私钥生成公钥(更简洁)
无需转换为PKCS#8格式,直接通过OpenSSL签名命令导出公钥:
# 先处理HEX得到裸二进制私钥 hex_clean=$(echo $hex | tr -d ':') echo $hex_clean | xxd -r -ps > ed25519_raw.priv # 生成并输出公钥 openssl dgst -sha256 -sign ed25519_raw.priv /dev/null 2>/dev/null | openssl pkey -pubout -outform der | openssl pkey -pubin -inform der -noout -text
执行上述任意方法后,生成的公钥应与你最初得到的c8:af:94:9f:f9:a2:10:95:2d:54:34:75:be:94:2d:e7:9a:ef:9c:4e:7c:6d:80:ae:fd:25:e3:a4:d5:b0:e3:30一致。
内容的提问来源于stack exchange,提问作者user569825
相关产品推荐
相关产品推荐

