Преобразование закрытого ключа EC из PEM в DER в python

#python #cryptography #public-key #ecdsa

#python #криптография #открытый ключ #ecdsa

Вопрос:

Я пытаюсь написать скрипт на Python для преобразования закрытого ключа EC из PKCS8 PEM в DER с использованием криптографии на Python.

Я смог сделать это ранее, используя openssl, вот так:

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

Я проверяю правильность файла DER, созданного с помощью OpenSSL, выполнив:

 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 с использованием того же метода, что и выше, я получаю:

Неожиданный результат: ожидаемый ‘1’ при запуске DER privkey, получен 0

Чего мне не хватает?

Ответ №1:

Попробуйте использовать другой формат, например TraditionalOpenSSL . Это сделало это для меня.

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

Комментарии:

1. Это не работает с необработанным ключом, например, с ключом, созданным с помощью PyNaCl.