我正在尝试编写一个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
我错过了什么?
尝试使用不同的格式,如TraditionalOpenSSL
。这对我来说。
pri_der = key.private_bytes(
encoding=serialization.Encoding.DER,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption(),
)