Как распечатать открытый ключ из сертификатов, используя библиотеку «криптография» в Python2? - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно извлечь открытый ключ из сертификата .pem, используя библиотеку криптографии в Python2, но я могу получить только объект открытого ключа.

В документации по криптографии я нашел этот код

from cryptography.hazmat.primitives.asymmetric import rsa

pem_cert=open("/home/lab14/aes/fd.pem","rb").read()

cert = x509.load_pem_x509_certificate(pem_cert, default_backend())

public_key = cert.public_key()

print(public_key)

Но когда я запускаю это, я получаю объект с открытым ключом, но не фактический ключ в шестнадцатеричном формате.

Вот вывод, который я получил

<cryptography.hazmat.backends.openssl.rsa._RSAPublicKey object at 0x7f49e214d6d8>

Любая помощь будет полезна и оценена.Спасибо

Ответы [ 2 ]

1 голос
/ 17 июня 2019

У вас есть открытый ключ объект , который необходимо закодировать, чтобы получить представление ключа в байтах.Затем эти байты могут быть закодированы с использованием любого шестнадцатеричного кодера - если это то, что требуется.

Поэтому просто вызовите public_bytes(encoding, format), чтобы получить байты.Кодировка может быть SubjectPublicKeyInfo, которая содержит информацию о типе открытого ключа (это общий ключ), или PKCS1, которая в основном содержит минимальную кодировку открытого ключа RSA.Обратите внимание, что вам может потребоваться сначала установить тип ключа, прежде чем вы сможете использовать PKCS1, поскольку он описывает только ключи RSA.

Вы также можете выбрать между форматами DER и PEM.DER просто возвращает байтовое представление определенной ASN.1 структуры открытого ключа RSA.База PEM 64 кодирует эту структуру и добавляет строки верхнего и нижнего колонтитула, чтобы создать текстовое представление ключа.

0 голосов
/ 17 июня 2019

Вы действительно не говорите, что хотите напечатать или почему. Если вы просто хотите напечатать открытый показатель и модуль RSAPublicKey, вы можете сделать:

public_key = cert.public_key()
print((public_key.public_numbers().e, public_key.public_numbers().n))
...