Comment vérifier dans pycrypto signature créé par openssl?

J'ai créé de clés publique/privée dans openssl, et a signé quelques données:

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

maintenant en python, je suis en train de vérifier ces données:

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

le problème, c'est que pub.verify s'attend à ce second paramètre à un élément de la liste avec un certain grand nombre. Et je ne sais pas comment faire pour convertir des données binaires dans un fichier signature de cet entier. Chaque exemple à propos de pycrypto montre la signature générée de pycrypto, et key.sign() génère une signature correcte en forme (1832273432...2340234L, ). Mais je ne sais pas comment utiliser externes signature.

Si cela est nécessaire, ci-dessous sont des informations supplémentaires, je ne sais pas exactement comment l'interpréter:

Brève information technique:

  • Format de signature numérique: PKCS#7 “Signé de Données”
  • Clé publique de procédure: DSS
  • La longueur de la clé: 512 – 1024 bits
  • Public exposant: 2 +1
  • Clé publique format: X. 509 v3 certificat
  • MD (Message Digest) algorithme: MD5 ou RIPEMD-160 16

OriginalL'auteur Ivan | 2011-06-14