2015-06-15 1 views
1

У меня есть следующий фрагмент кода, который извлечь сертификат хоста лист и сертификат RSA открытый ключ:Как извлечь RSA публичного экспоненту с помощью питона M2Crypto

c = ssock.getpeercert(True) 
x509 = M2Crypto.X509.load_cert_der_string(c) 
publickey=x509.get_pubkey() 
m=publickey.get_modulus() 

Я пытался найти функции для извлечения общественного экспоненту ключ RSA, но я не смог найти. Можете ли вы помочь мне выяснить, как я могу извлечь публичный показатель открытого ключа RSA?

EDIT: если это невозможно по M2Crypt. Пожалуйста, укажите любой другой способ.

EDIT 2: когда я пытался загрузить сертификат в DER как:

key = RSA.importKey(publickey.as_der()) 

Я получил эту ошибку:

('file() argument 1 must be encoded string without NULL bytes, not str',)

Я хочу, чтобы избежать сохранения в сертификаты локальной системе. Я просто хочу извлечь информацию, такую ​​как модуль и показатель степени. Из-за ошибки я понимаю, что функция importKey принимает аргумент как файл DER, а не строку. Можете ли вы помочь мне найти обходной путь?

ответ

1

Этот код должен дать вам модуль и общественный показатель:

import Crypto.PublicKey.RSA 

c = ssock.getpeercert(True) 
x509 = M2Crypto.X509.load_cert_der_string(c) 
publickey = x509.get_pubkey() 
key = Crypto.PublicKey.RSA.importKey(publickey.as_der()) 

modulus = key.n 
public_exponent = key.e 
+0

Я не хочу модуль, потому что я уже получил его от 'мод = pk.get_modulus()' Я хочу общественный показатель, который обычно с именем 'e'. – user2192774

+0

Это также не помогло мне извлечь 'n'. Вы уверены, что я отправляю 'c' на' importKey' ?? – user2192774

+0

Сначала я неправильно понял вопрос и принял некоторые вещи. См. Отредактированную версию кода. –