【问题标题】:How to convert private key that is in hex format to private key in pem and/or der format?如何将十六进制格式的私钥转换为 pem 和/或 der 格式的私钥?
【发布时间】:2019-06-21 10:00:57
【问题描述】:

我有这个十六进制格式的私钥:

308204BC020100300D06092A864886F70D0101010500048204A6308204A20201000282010100B3B6F5AB13FCDECC12438581E90302E12BCF14570B49DCA2BF40957B79B10630DE20CB18B21D7393AC54FBA9D236F09235C4AF4D8E9227B163B8E14835A8FA04B5B8D0AD4D384CAF56FE269DDE40872129C90897D1BDC569CA8F18A7721B7C374B10DCE98921255B8BE21D42360BD8C8A1FE38E4E2E32E22CECE6A56A7B22FCC82B6D5C333A59B47C9330553731F812284EC8A3847192EC76BBC6A086E8D5347B8DCE352672E606BDCAAE6E99A401540DC370ED7D06AA33818E90EDE4A9AF74C4EBD30D1DD4F0F9E1D57C92F4BC80A9E21E1B510AA7DE6B6D3F541498D64D19A901BC2CB6B2C4C5DF6205E3B0E0FB9D6AB8EBADD74809CA8EC23C34AEC26AC6502030099B502820100189D6B16364E7985235987E216C6FEA91C479E09FF13C14CA91C239800DFE8A13A3C9E2B584A43CF15C40C92181ADA987900B2A125655787209EB8E705A37AB465697B7502EA76C630F3293D9EEF8116B7689B59A207A478F9940335FCAFE0B0E53BD82D1D8F24FC5E518CD380A56BD669DDC6BA2D4242C9BBAE4043658552E9798FEF4787407689BDC0CFDDF0D7CD770E702442CE8CE5EA8FE9E14E228EE277F6757BDA62379B4E50A373F6E6558A6D9B87C3888C19C0CC213739FA8F4FD2C67A2F52C 5710C4EEFAFF0C381B7531CF292A4763D1D38B2D5EB0B954358BAB8D9E9C207BF4C4B380A42D825E1E2B281ADD0978A4D125CC0F4E280B84A60D03D8D02818100D904EF9E99EEFA86B40B8BA53DA69D2E059E692A2FD47B13C83D31D8FFEE57ACF993DBF693D12575802179105915C32B7EADD3363FC2C9CF46832545EEBD3B1D7A76D0F504F0C7A250D31E8940E0F413946A53088A750B4743F9A910A6C565749CDC8629E3BA12C7492D59EFDC314B4EAA1DD4132FD174A3453689FCF737452D02818100D3FEAB5D8E9D68C4FCC49A11EAE2A17B9275DD574D9EC294CB6530591821CD9C125D240B613CD43D220E14062DB719907CB6F562C1DE312C956EBCEF143610B3AB526B4904AC0B46A7255AD63DDB2FB1F2555A17E9195138AA7575CB92BF08A3B14E59BBD3C87FFEB0BA6C298218F710EBC147D6E7A2D5B71C519B7F929D77190281803B6798FC0D14B85E4469398232BD222EEDDB9483B7CCE5630C32A8D4629A92E1F100A4FCDE252DD097070FA6A751CA22A4D6CB9AF92AB3A8ECC957D4BB50DC25C4BA8B3957C375D663EF3B74B3912BAB6C177BAAE119A4A782856450E78FF6CFBDECD2B7CB54C7074FB09209A927DFE8E2098B4F4BA307631672231DF98AD851028180298437FDF56371B397AD20D20EC5635B698CA66CD4863C43EA216D466CE5ED87EA17DFE1630BAC002EF 7782629D55EEC9D461F6339E18DFAB45815EEC37DC64F8B04A1BEE6E28A3F0C067194F570D49F90FCD39C2C0C8B3EA4B5BF229A9D3CA4485DBD666BE318C2A8E787614415C099C4D036F05569C6C4D0C0293D36FA194D028180743B3A761A06BF2DFF3C065366A73707787909B261183AB20F0322BC2A76363E1DED705D4FE38D9E211022D252132A513D5C3417F4EC6BA12B4AC3A48CC28E823CAF0CC3A1784C73002323A91D121E25B09236447221DE23C32CA5C60A37CDCBCD7EB1093CF792662ADDA61B19AB51F5E9B5529D820811B0D32B5CBBB458C89A P>

我想将它转换为 der 和 pem 并用它签署一个文件,以便对方可以用他们的公钥验证签名。

我正在尝试使用 openssl 和 xxd 在 bash 脚本中执行此操作,并且我正在考虑尝试使用 python,但不知何故现在我无法使其工作。

如果有人有任何想法,我很乐意听到。

编辑:

例如,我可以使用 https://holtstrom.com/michael/tools/hextopem.php 在线转换器将十六进制转换为 pem,然后使用 -----BEGIN/END RSA PRIVATE KEY----- 页眉/页脚将其保存在 private_key.pem 文件中,如果我检查它们匹配的私钥和匹配公钥的模数,但我无法在任何地方加载该密钥以使用它来签署 OpenSSL 也不会加载密钥,所以我想我错过了一些东西。

【问题讨论】:

  • 真希望私钥不重要……
  • 不是,是我在玩的测试键。
  • openssl 可以为我加载 rsa 私钥。错误信息是什么?
  • 你能写一个你用过的命令吗?

标签: python bash openssl hex der


【解决方案1】:

使用您的十六进制输入文件 (rsa-key-hex.txt),您可以执行以下操作 -

将其转换为二进制(实际上是 DER 格式)-

xxd -r -ps rsa-key-hex.txt rsa-key.der

打印 DER 私钥 -

openssl pkey -in rsa-key.der -inform der -noout -text

将其转换为 PEM -

openssl pkey -in rsa-key.der -inform der -out rsa-key.pem -outform pem

使用私钥签署一些输入 -

echo "Some Input" | openssl dgst -sha256 -sign rsa-key.pem > signature.dat

提取公钥 -

openssl pkey -in rsa-key.pem -pubout -out rsa-key-pub.pem

使用公钥检查签名 -

echo "Some Input" | openssl dgst -sha256 -verify rsa-key-pub.pem -signature signature.dat

或者,直接使用私钥检查签名 -

echo "Some Input" | openssl dgst -sha256 -prverify rsa-key.pem -signature signature.dat

【讨论】:

    【解决方案2】:

    简单来说:

    DER实际上是二进制格式的数字证书数据。
    PEM 是该二进制数据的 base64 编码形式。

    现在,假设您的 HEX 数据是 PEM 格式的 ASCII 转换(即您的 PEM 实际上是 base64 编码),您可以转换为 PEM(micro-python):

    import binascii
    binascii.unhexlify(hex_data)
    

    将 HEX 数据转换为 DER 格式:

    binascii.a2b_base64(binascii.unhexlify(hex_data))
    

    您可以使用其他语言的相应库。

    【讨论】:

    • PEM 包含特定格式的 base 64 编码数据,但并不等于它。而且你在这个答案中也混合了 PEM 和 DER。
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多