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

时间:2019-04-04 17:39:05

标签: python cryptography public-key ecdsa

我正在尝试编写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私钥开始时预期为'1',得到0

我想念什么?

1 个答案:

答案 0 :(得分:1)

尝试使用其他格式,例如<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="keybContainer" viewBox="0 0 150 150" xml:space="preserve"> <defs> <symbol id="sym-cr" preserveAspectRatio="xMidYMid meet" viewBox="0 0 60 60"> <circle cx="30" cy="30" r="30" /> <text x="30" y="30" text-anchor="middle" font-size="0.45em" fill="white"> <tspan dy="0.2em">Click to reorder</tspan> </text> </symbol> </defs> <use order="1" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="0" y="0" width="60" height="60" style="fill: #ff9700; z-index: 1;"></use> <use order="4" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="50" y="20" width="50" height="50" style="fill: #0D47A1; z-index: 4;"></use> <use order="5" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="15" y="30" width="50" height="40" style="fill: #9E9E9E; z-index: 5;"></use> <use order="3" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="25" y="30" width="80" height="80" style="fill: #D1E163; z-index: 3;"></use> <use order="2" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="30" y="0" width="50" height="70" style="fill: #00BCD4; z-index: 2;"></use> <use order="0" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sym-cr" x="5" y="5" width="100" height="100" style="fill: #E91E63; z-index: 0;"></use> </svg>。这对我来说是成功的。

TraditionalOpenSSL