Я создал закрытый / открытый ключ в 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,)
. Но я не знаю, как использовать внешнюю подпись.
Если это необходимо, ниже приводится дополнительная информация, которую я не знаю точно, как интерпретировать:
Краткая техническая информация: