2017-02-03 6 views
0

Die Frage wird wiederholt gestellt, aber ich bin nicht in der Lage, Arbeit zu erledigen, so dass erneut zu buchen. Ich bin eine öffentliche Schlüsseldatei geteilt, dieEntschlüsselung mit öffentlichen Schlüssel in Python

im Format von ----- ZERTIFIKAT ist BEGIN ----- XXXXXXXXXXXXXXXXXXXXXXX ----- END CERTIFICATE -----

Mit dieser Datei kann ich in PHP Entschlüsselung durchführen und entschlüsselte Nachricht mit openssl_public_decrypt() erhalten. Jetzt versuche ich den Entschlüsselungsprozess in Python durchzuführen. Ich habe versucht, mit:

Crypto - gives 'valueerror: rsa key format is not supported' when RSA.importKey() is called. 

python-rsa und M2Crypto auch nicht helfen.

Für M2Crypto habe ich diese link verwiesen, aber RSA.load_pub_key_bio(bio) Zeile Code gibt Fehler.

Jede Hilfe wird wirklich geschätzt. Vielen Dank.

Antwort

0

Sie können dies mit der Gefahrstoffschicht der cryptography Bibliothek tun (beachten Sie, dass Kryptografie ist jetzt die Back-End-Bibliothek von pyOpenSSL verwendet; während pyOpenSSL ist für einige Anwendungen bequem, Kryptografie bietet eine viel vollständige OpenSSL-Bindung sowie nützlich höher -level (sicherer, besser) kryptographische Primitive und Bindungen zu anderen kryptographischen Bibliotheken. Bevor Sie das tun, beachten Sie, dass es sehr einfach ist, sich mit der Gefahrstoffschicht in den Fuß zu schießen, und das Kryptographie-Team wird sich nicht entschuldigen, wenn Sie es tun.

Sie sollten sicher sein, dass Sie verstehen, was mit diesen Vorgängen passiert, bevor Sie sich auf den Code verlassen, um irgendeine Art von Sicherheit bereitzustellen. Wenn Sie den gesamten Stack - von der Verschlüsselung bis zur Entschlüsselung - steuern, können Sie auch stoppen. Verwenden Sie stattdessen etwas wie PGP.

>>> from cryptography.hazmat.backends import default_backend 
>>> from cryptography.hazmat.primitives import serialization 
>>> with open("key.pem") as key_file: 
...  pkey = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend()) 
... 
>>> from cryptography.hazmat.primitives.asymmetric import padding 
>>> ciphertext = pkey.public_key().encrypt(b"asdasd", padding.PKCS1v15()) 
>>> print repr(ciphertext) 
'*\xf3\x8e2T\x8f\x93\xae}\x18\x9f7\x00\xbcw\xbd$\x14\x9f6\x9a\xc3\xa1\xa8\xf3\xa5\xcc\xae\x89\x17]\x91\x1d\x85\xb0.\xf7&\x12w\x0ca\x1cN\xd2\x8f\xf5\xf7\xfe\x93\xfbL\x17#\xc6g\x1dj\x84\xc3ET\xd1\x92 \xd2u\xc7AF\xa9<4i`d\xdb\xc0%\xae\x06\xc4\xeeJsC\x06\x80\xc9* \x11\x99P\xdc\xa9S\xad\xe2\xe5L\x9f\x9f\x0c\x04\xef\x95\xd7:*\[email protected]\r|e\xcdL\xfe9\x80R\x82c\x00\xc0\x9as\xea' 
>>> pkey.decrypt(ciphertext, padding.PKCS1v15()) 
'asdasd' 
>>> 
+0

Hallo, vielen Dank für die Antwort. Der Grund dafür, dass ich diese Antwort verspätet beantwortete - ich stieß auf Probleme bei der Installation des 'Kryptografie'-Pakets, habe es endlich behoben, zweitens habe ich in dem von Ihnen bereitgestellten Code-Snippet Fehler bekommen, da kein Modul' Serialisierung' genannt wird. Ich suchte Paket für dieses Modul durch, aber es gab mehrere Serialisierer, also war verwirrt, welche man benutzt und sie sind nicht allgemein. Es wäre hilfreich, wenn Sie die Antwort aktualisieren. Und ich mache nur Entschlüsselung. Nur verschlüsselte Daten werden mir zur Verfügung gestellt. –

+0

Hoppla, tut mir leid, dass er keinen Import hat! Hinzugefügt. –

+0

Ich bekomme Probleme, wenn die Zeile 'pkey = serialization.load_pem_private_key (key_file.read(), password = None, backend = default_backend())' ausgeführt wird, 'File \ /usr/local/lib/python2.7/ dist-packages/cryptography/hazmat/backends/openssl/backend.py ", Zeile 1325, in _handle_key_loading_error raise ValueError (" Die Schlüsseldaten konnten nicht entschlüsselt werden. ")' –

Verwandte Themen