在Python中将EC私钥从PEM转换为DER

问题描述 投票:3回答:1

我正在尝试编写一个Python脚本,使用Python中的cryptography将EC私钥从PKCS8 PEM转换为DER。

我以前使用openssl就可以这样做:

openssl pkcs8 -nocrypt -in pem_key.p8 -out der_key.der -outform der

我通过执行以下操作验证使用OpenSSL生成的DER文件是否正确:

from ecdsa import SigningKey
file = open('der_key.der', 'rb')

SigningKey.from_der(file.read())

>>> <ecdsa.keys.SigningKey at 0x112bd3630>

现在我尝试使用Python来做同样的事情

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

pem_key_bytes = str.encode(pem_key)

key = serialization.load_pem_private_key(
    pem_key_bytes, password=None, backend=default_backend()
)

pri_der = key.private_bytes(
    encoding=serialization.Encoding.DER,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption(),
)

但是,当使用上面相同的方法在DER编码中测试此密钥时,我得到:

UnexpectedDER:在DER privkey开始时预期为'1',得到0

我错过了什么?

python cryptography public-key ecdsa
1个回答
1
投票

尝试使用不同的格式,如TraditionalOpenSSL。这对我来说。

pri_der = key.private_bytes(
    encoding=serialization.Encoding.DER,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption(),
)
© www.soinside.com 2019 - 2024. All rights reserved.