将ec密钥解码为二进制格式

kokeuurv  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(384)

我正在尝试编写一个python函数,该函数将获取pem格式的私钥文件,并将其转换为原始二进制表示形式,类似于以下openssl函数的功能:

openssl ec -in ec_private.pem -noout -text
read EC key
Private-Key: (256 bit)
priv:
    7a:f6:73:2f:58:1d:00:5a:fc:f2:16:f6:38:5f:f6:
    37:10:29:24:2c:c6:08:40:dd:7d:2a:7a:55:03:b7:
    d2:1c
pub:
    04:11:5b:3f:a3:9f:ae:41:b4:e3:2f:77:21:ca:72:
    f8:c1:78:14:83:64:7d:ab:d5:14:f0:8e:66:12:8b:
    d4:7f:ce:90:67:b9:0e:04:88:c9:c2:a9:f3:0f:5a:
    26:6a:07:84:1d:6c:07:74:13:ba:07:e7:45:69:b9:
    9d:4f:d3:ce:c6
ASN1 OID: prime256v1
NIST CURVE: P-256

但是priv-key格式是一种代码友好的格式,就像这样

0x7A, 0xF6...

我一直在尝试使用pyopenssl库、加密库和pynacl库,但没有成功。
有没有办法做到这一点,或者我必须在命令行函数周围编写一个 Package 器来为我进行格式化?
谢谢

qoefvg9y

qoefvg9y1#

最后,我只是围绕openssl系统库进行了 Package :

import os
def convert_key(keyfile):
    stream = os.popen('openssl ec -in {} -noout -text'.format(keyfile))
    output = stream.read().strip()
    keylines = output.splitlines()
    keystring = keylines[2].strip() + keylines[3].strip() + keylines[4].strip()

    formatted_key = "0x" + keystring.replace(":", ", 0x")
    return formatted_key

这可能是一个非常脆弱的方法来创造期望的结果,但我找不到一个更具python风格的方法来做到这一点。

相关问题