2009-07-16 7 views
4

Est-ce que quelqu'un connaît le moyen le plus simple d'importer une clé publique/privée OpenSSL RSA (en utilisant une phrase secrète) avec une bibliothèque Python et de l'utiliser pour déchiffrer un message.Décryptage Python RSA à l'aide de clés générées par OpenSSL

J'ai pris un oeil à ezPyCrypto, mais ne peut pas sembler obtenir à reconnaître une clé RSA OpenSSL, j'ai essayé d'importer une clé avec importkey comme suit:

key.importKey(myKey, passphrase='PASSPHRASE') 

myKey dans mon case est une paire de clés publique/privée OpenSSL RSA représentée par une chaîne.

Ce billons avec:

unbound method importKey() must be called with key instance as first argument (got str instance instead)

Le doc API dit:

importKey(self, keystring, **kwds)

quelqu'un peut-il suggérer que je lis une clé dans l'utilisation ezPyCrypto? J'ai aussi essayé:

key(key, passphrase='PASSPHRASE') 

mais avec renâcle:

ezPyCrypto.CryptoKeyError: Attempted to import invalid key, or passphrase is bad

Lien vers docs ici:

http://www.freenet.org.nz/ezPyCrypto/detail/index.html

EDIT: Juste une mise à jour à ce sujet. Vous avez réussi à importer une clé RSA, mais vous avez eu un réel problème de décryptage car eqPyCrypto ne prend pas en charge le chiffrement par bloc AES. Juste pour que les gens sachent. J'ai réussi à faire ce que je voulais en utilisant ncrypt (http://tachyon.in/ncrypt/). J'ai eu quelques problèmes de compilation avec M2Crypto en raison de problèmes de compilation SWIG et OpenSSL, malgré ayant des versions installées qui dépassaient les exigences minimales. Il semblerait que les frameworks de chiffrement/décryptage Python soient un peu un champ de mines pour le moment. Ho, merci pour votre aide.

Répondre

6

La première erreur vous indique que importKey doit être appelée sur une instance de key.

k = key() 
k.importKey(myKey, passphrase='PASSPHRASE') 

Cependant, la documentation semble suggérer que c'est une meilleure façon de faire ce que vous voulez:

k = key(keyobj=myKey, passphrase='PASSPHRASE') 
+0

fraîche Ok, qui permet de résoudre l'importation de ma clé. En ce qui concerne la partie de décryptage je suppose que j'utilise k.decString (someString) pour déchiffrer la clé ... merci pour l'aide – Jon

5

On ne sait pas ce que vous essayez d'atteindre, mais vous pouvez donner M2Crypto une essayer. De mon point de vue, c'est le meilleur wrapper OpenSSL disponible pour Python.

Voici un exemple de cryptage RSA/code decription:

import M2Crypto as m2c 
import textwrap 
key = m2c.RSA.load_key('key.pem', lambda prompt: 'mypassword') 

# encrypt something: 
data = 'testing 123' 
encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding) 
print "Encrypted data:" 
print "\n".join(textwrap.wrap(' '.join(['%02x' % ord(b) for b in encrypted ]))) 

# and now decrypt it: 
decrypted = key.private_decrypt(encrypted, m2c.RSA.pkcs1_padding) 
print "Decrypted data:" 
print decrypted 
print data == decrypted 
+1

Il est très clair ce que j'essaie de réaliser: "importer une clé privée/publique OpenSSL RSA (en utilisant une phrase secrète) avec une bibliothèque Python et l'utiliser pour déchiffrer un message. " – Jon

+1

Eh bien, l'exemple ci-dessus fait exactement cela. Toutefois, le cryptage RSA est rarement utilisé seul; Généralement, vous disposez d'un algorithme de chiffrement de clé symétrique utilisé pour chiffrer le flux de données et RSA utilisé pour chiffrer la clé symétrique.Donc peut-être vous devriez décrire votre plus gros problème si vous voulez trouver la meilleure solution. – abbot

Questions connexes