2009-07-15 6 views
1

Je crée une fonction de cryptage en Python et je veux crypter un nombre aléatoire en utilisant une clé publique.Cryptage avec Python

Je voudrais savoir que si j'utilise paquet Crypto (Crypto.publicKey.pubkey) que comment puis-je utiliser la méthode comme ...

def encrypt(self,plaintext,k) 

Ici, le k est lui-même un nombre aléatoire, est-ce la clé. Quelqu'un peut-il m'aider avec un peu lié?

Répondre

3

vous pouvez essayer Pycrypto.

+0

Salut, j'ai essayé d'installer pycrypto mais en obtenant une erreur vcvarsall.bat. J'ai aussi installé le compilateur VC++ pour Python. Une idée de ce que serait ce problème? – Arockia

4

Etes-vous en train de chiffrer une clé de session/message pour le chiffrement symétrique en utilisant la clé publique du destinataire? Il pourrait être plus simple d'utiliser, disons, SSH ou TLS dans ces cas.

Retour à votre question:

Me Too Crypto (M2Crypto) est une enveloppe agréable autour OpenSSL.

Tout d'abord, vous devez obtenir la clé publique du destinataire:

recip = M2Crypto.RSA.load_pub_key(open('recipient_public_key.pem','rb').read()) 

Maintenant, vous pouvez chiffrer votre message:

plaintext = random_integer_you_want_to_encrypt 
msg = recip.public_encrypt(plaintext,RSA.pkcs1_padding) 

Maintenant, seule une personne avec la clé privée du bénéficiaire peut le décrypter.

0

La valeur k que vous transmettez pour crypter ne fait pas partie de la clé. k est une valeur aléatoire utilisée pour randomiser le chiffrement. Il doit s'agir d'un nombre aléatoire différent chaque fois que vous cryptez un message.

Malheureusement, selon l'algorithme de clé publique que vous utilisez, ce k doit satisfaire à des conditions plus ou moins strictes. Par exemple, votre cryptage peut être complètement non sécurisé si k ne contient pas assez d'entropie. Cela rend l'utilisation de pycrypto difficile, car vous devez en savoir plus sur le système de chiffrement que vous utilisez que le développeur de la bibliothèque. À mon avis, il s'agit d'une faille sérieuse de pycrypto et je vous recommande d'utiliser une bibliothèque de chiffrement de plus haut niveau qui n'exige pas que vous connaissiez de tels détails. (c'est-à-dire quelque chose comme M2Crypto)