【问题标题】:How to convert an ECDSA key from hex to PEM format如何将 ECDSA 密钥从十六进制转换为 PEM 格式
【发布时间】:2013-06-07 03:36:57
【问题描述】:

我有一个据称包含 EC 公钥的十六进制字符串。我需要将此十六进制字符串转换为 PEM 格式(以下示例中的“key.pem”),以便调查我计划使用“openssl ec -in key.pem -text -noout”处理的内容。这可能吗?

【问题讨论】:

    标签: openssl format public-key ecdsa


    【解决方案1】:

    如果您以十六进制字符串开头,则需要先对其进行十六进制解码以获取 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

    【讨论】:

    • 我遇到了与问题作者相同的问题,在我的情况下,十六进制源是 ECDSA openssl 模块,不,EC_POINT_point2hex 提供的十六进制不是 ASN.1 序列,不是以 30 开头,通常太长;到目前为止,解码这个十六进制的唯一方法是直接在 C 中使用反向 EC_POINT_hex2point,我没有在 bash 中实现任何有用的东西。顺便说一句,这个十六进制与 PEM 的 base64 解码内容无关,而且它也没有关于使用曲线的信息(你必须自己确保它是正确的,否则密钥将无用)。
    【解决方案2】:

    我假设使用十六进制,您的意思是二进制(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
    

    【讨论】:

    • 我对密钥一无所知,除了以下内容: - 114 个字符长(每个字符在 0-9 和 A 到 F 范围内,因此为 57 个字节); - 据称它包含一个公共 ECDSA 密钥
    • 第一个命令返回(“key”中的十六进制字符串):# openssl ec -in key -inform DER -pubin -out keyout.pem -outform PEM 读取 EC 密钥无法加载密钥 3073398984:错误:0D07209B:asn1 编码例程:ASN1_get_object:太长:asn1_lib.c:142:3073398984:错误:0D068066:asn1 编码例程:ASN1_CHECK_TLEN:错误的对象头:tasn_dec.c:1306:3073398984:错误:0D07803A:asn1 编码例程: ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509_ALGOR 3073398984:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:751:Field=algor, Type=X509_PUBKEY
    • 第二:#openssl ec -in key -inform DER -pubin -text -noout read EC key 无法加载 Key 3073931464:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:asn1_lib.c :142: 3073931464:error:0D068066:asn1 编码例程:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1306:3073931464:error:0D07803A:asn1 编码例程:ASN1_ITEM_EX_D2I:nested asn1 错误:tasn_dec.c:381:Type 3073931464:error:0D08303A:asn1 编码例程:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 错误:tasn_dec.c:751:Field=algor, Type=X509_PUBKEY
    • 既然是公钥,你介意把它贴在这里,让我们看看它是什么格式吗?
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2011-04-21
    • 2019-06-21
    • 2019-12-20
    • 2013-07-11
    • 2022-07-08
    • 1970-01-01
    相关资源
    最近更新 更多