2009-07-15 4 views
1

Ich mache eine Verschlüsselungsfunktion in Python und ich möchte eine Zufallszahl mit einem öffentlichen Schlüssel verschlüsseln.Verschlüsselung mit Python

Ich möchte wissen, dass, wenn ich Crypto-Paket verwenden (Crypto.publicKey.pubkey) als wie kann ich die Methode verwenden, wie ...

def encrypt(self,plaintext,k) 

Hier ist die k selbst eine Zufallszahl, das den Schlüssel bedeuten, ist. Kann mir jemand mit etwas verwandten helfen?

Antwort

3

können Sie versuchen Pycrypto.

+0

Hallo, ich habe versucht, pycrypto zu installieren, aber einen Fehler vcvarsall.bat bekommen. Ich habe auch VC++ - Compiler für Python installiert. Irgendeine Idee, was wäre das Problem? – Arockia

4

Versuchen Sie, einen Sitzungs-/Nachrichtenschlüssel für die symmetrische Verschlüsselung mit dem öffentlichen Schlüssel des Empfängers zu verschlüsseln? In diesen Fällen könnte es beispielsweise einfacher sein, SSH oder TLS zu verwenden.

Zurück zu Ihrer Frage:

Me Too Crypto (m2crypto) ist ein nettes Wrapper um openssl.

Zuerst müssen Sie den öffentlichen Schlüssel des Empfängers erhalten:

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

Jetzt können Sie Ihre Nachricht verschlüsseln:

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

Jetzt nur jemand mit den privaten Schlüsseln des Empfängers kann es entschlüsseln.

0

Der Wert k, den Sie zum Verschlüsseln übergeben, ist nicht Teil des Schlüssels. k ist ein zufälliger Wert, mit dem die Verschlüsselung randomisiert wird. Bei jedem Verschlüsseln einer Nachricht sollte es sich um eine andere Zufallszahl handeln.

Leider, abhängig davon, welchen öffentlichen Schlüsselalgorithmus Sie verwenden, muss dieses k mehr oder weniger strenge Bedingungen erfüllen. Das heißt, Ihre Verschlüsselung kann völlig unsicher sein, wenn k nicht genug Entropie enthält. Dies macht die Verwendung von pycrypto schwierig, da Sie mehr über das von Ihnen verwendete Kryptosystem wissen müssen als der Entwickler der Bibliothek. Meiner Meinung nach ist dies ein schwerwiegender Fehler von pycrypto und ich würde empfehlen, dass Sie eine Crypto-Bibliothek auf höherer Ebene verwenden, bei der Sie solche Details nicht kennen müssen. (d. h. so etwas wie M2Crypto)