【发布时间】:2013-06-07 03:36:57
【问题描述】:
我有一个据称包含 EC 公钥的十六进制字符串。我需要将此十六进制字符串转换为 PEM 格式(以下示例中的“key.pem”),以便调查我计划使用“openssl ec -in key.pem -text -noout”处理的内容。这可能吗?
【问题讨论】:
标签: openssl format public-key ecdsa
我有一个据称包含 EC 公钥的十六进制字符串。我需要将此十六进制字符串转换为 PEM 格式(以下示例中的“key.pem”),以便调查我计划使用“openssl ec -in key.pem -text -noout”处理的内容。这可能吗?
【问题讨论】:
标签: openssl format public-key ecdsa
如果您以十六进制字符串开头,则需要先对其进行十六进制解码以获取 DER 编码。
十六进制字符串应以30... 开头,表示它是一个ASN.1 序列。
此 shell 命令将进行十六进制解码(使用 xxd),然后使用 OpenSSL 解析生成的 DER 公钥:
echo "30...." | xxd -r -p - | openssl ec -inform der -pubin -noout -text
要输出 PEM,请删除 -noout -text,添加 -pubout -out publickey.pem
echo "30...." | xxd -r -p - | openssl ec -inform der -pubin -pubout -out publickey.pem
如果它实际上是私钥,则省略 -pubin 和 -pubout。
【讨论】:
我假设使用十六进制,您的意思是二进制(DER 格式)密钥?或者是人类可读文件中的这个十六进制字符串,其标题以“-----BEGIN PUBLIC KEY-----”开头?如果您看到该标题,则它已经是 PEM 格式。
如果是二进制格式,试试这个将二进制密钥转换为 pem:
openssl ec -in key.der -inform DER -pubin -out keyout.pem -outform PEM
其中“key.der”是您的二进制密钥。
但是,您还应该能够在不转换为 PEM 的情况下调查内容。只需使用:
openssl ec -in key.der -inform DER -pubin -text -noout
【讨论】: