Как проверить подпись pycrypto, созданную openssl?

Я создал закрытый / открытый ключ в openssl и подписал некоторые данные:

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
echo 'data to sign' > data.txt
openssl dgst -md5 < data.txt > hash
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash  > signature

теперь на python,Я пытаюсь проверить эти данные:

pubKey = open('public.pem').read()
data = open('data.txt').read()
signature = open('signature').read()

from Crypto import PublicKey
key = PublicKey.RSA.importKey(pubKey)
pub = key.publickey()
hash = MD5.new(data).hexdigest()
# here, hash is same, as contents of 'hash' file
print pub.verify(hash, signature) # <-- here

проблема в том, что pub.verify ожидает, что второй параметр будет одноэлементным списком с некоторым большим числом. И я не знаю, как преобразовать двоичные данные в файле подписи в это целое число. Каждый пример о pycrypto показывает подпись, сгенерированную из pycrypto, а key.sign () генерирует правильную подпись в форме (1832273432 ... 2340234L,) . Но я не знаю, как использовать внешнюю подпись.

Если это необходимо, ниже приводится дополнительная информация, которую я не знаю точно, как интерпретировать:

Краткая техническая информация:

  • Формат цифровой подписи: PKCS # 7 «Подписанные данные»
  • Процедура открытого ключа: DSS
  • Длина ключа: 512 - 1024 бит
  • Открытый показатель степени: 2 +1
  • Формат открытого ключа: сертификат X.509 v3
  • MD (Дайджест сообщения): MD5 или RIPEMD-160 16
10
задан Ivan 15 June 2011 в 18:43
поделиться