Frage

Ich schreibe ein Programm in Python 3, das Verschlüsselungsfunktionen (zumindest AES und RSA) benötigt. Ich habe gefunden Pycrypto Das scheint nur auf 2.x -Versionen zu funktionieren.

Gibt es ein gutes Tool für Python 3 oder sollte ich lieber mein Programm übersetzen, um mit Python 2 (oder einer anderen Lösung) kompatibel zu sein?

Vielen Dank


Aktualisieren Wie unten erwähnt, ist Pycrypto jetzt auf PY3K erhältlich

War es hilfreich?

Lösung

Pycrypto 2.4.1 und später arbeiten Sie jetzt an Python 3.x (siehe Changelog Diff).

Andere Tipps

Obwohl Python 3 selbst für die Primetime bereit ist, ist das Fehlen von Bibliotheken, die es unterstützen, ein Hindernis. Das Beste, was Sie tun können, ist natürlich, Pycrypto zu Python 3 zu helfen, obwohl es, da es viele C-Extensionsmodule hat, die wahrscheinlich nicht ganz trivial sind und ein paar Tage arbeiten werden, würde ich denken. Vielleicht interessiert sich der aktuelle Betreuer für das Portieren oder bereits auf halbem Weg dort, Sie sollten ihn kontaktieren und fragen.

Es gibt ein RSA -Modul in Python, das einen ziemlich sauberen und leicht tragbaren Code enthält, aber für AES scheint es, als wäre Pycrypto das zu verwendende Modul. Daher ist es wahrscheinlich einfacher, dass Ihre Software stattdessen unter Python 2 ausgeführt wird.

Krytografische Bibliotheken sind hauptsächlich numerische Berechnungen und ich weiß nicht, warum PY3K -Versionen noch nicht verfügbar sind.

  1. Hier ist Pydes Verfügbar für Python 3.
  2. Hier ist AES -Algorithmus Implementierung in Python 3. Daraus portiert PY2K -Version
  3. Hier ist RSA -Algorithmus Implementierung in Python 3. Ich habe es daraus portiert PY2K -Version.

Bitte verwenden Sie sie mit Vorsicht, da sie nur Entwicklungsprogramme nach dem Algorithmus -Text implementiert werden. (Das heißt, ich bin mir der Strenge in der ursprünglichen Python2 -Version nicht sicher). Außerdem sind sie alle reine Python-Bibliotheken, sie wären langsamer als alles, was mit C-Extensions geschrieben wurde (und vielleicht ist das der Grund, warum sich PY3K-Versionen verzögert).

Ich habe eine Wrapper -Bibliothek geschrieben Einfacher Kriechen Das bietet Verschlüsselung und Entschlüsselung in Python 3 und delegiert die Arbeit an Pycrypto.

Zu den Vorteilen, dies über Pycrypto zu verwenden, gehören direkt:

  • viel einfachere Schnittstelle:

    data = encrypt(password, text)
    text = decrypt(password, data).decode('utf8')
    
  • Schlüsselerweiterung, um die Verwendung von Passphrasen sicherer zu gestalten

  • Verwendung eines HMAC zur Änderung der Daten prüfen

  • Ein versioniertes Header, mit dem ich die Implementierung auf Googles KeycZar umstellen kann, sobald sie zu Python 3 wechselt (da dies besser gepflegt werden sollte - ich habe dies nur aus offensichtlicher Notwendigkeit geschrieben).

Sie können das Paket mit:

easy_install simple_crypt

Weitere Informationen zur Verfügung der verfügbaren Informationen Github -Seite für das Projekt.

Mir ist keine vernünftige Krypto -Bibliothek für Python (unabhängig von der Version) bekannt. Alles, was mir bekannt ist (einschließlich Pycrypto), ist nur ein Spielzeug. Wenn Sie eine ernsthafte Anwendung implementieren möchten, sollten Sie nach einem Wrapper in eine echte Bibliothek wie M2Crypto suchen. Pycrypto selbst folgt vielen Standards. Insbesondere benötigt RSA ein gutes Polsterprogramm, um sicher zu sein. Da Pycrypto zumindest keine Polsterung verwendet, macht dies seine RSA -Implementierung sowohl unsicher als auch unvereinbar mit anderen Krypto -Bibliotheken.

Antwort auf Martins Frage: Offensichtlich ist diese Frage für viele Meinungen offen. Ein Vorschlag wäre, Java anstelle von Python zu verwenden. Java hat eine gut definierte kryptografische Schnittstelle, und es gibt verschiedene Anbieter, die die Schnittstelle implementieren. Dies hat den ziemlich großen Vorteil, dass man eine vom Anbieter unabhängige Lösung implementieren kann, damit man leicht zwischen verschiedenen Anbietern wechseln kann. Ich persönlich mag OpenSSL, aber ich bin mir bewusst, dass es ziemlich schwer zu verwenden ist.

Hier ist ein Python3 Bibliothek Für Kryptographie Forschung von Johns Hopkins. Es unterstützt elliptische Kurvenoperationen und pairing -basierte Krypto.

Meine Python -Wrapper um libtomcrypt unterstützt jetzt Python 3 und hat sowohl AES als auch RSA.

Sehen: https://github.com/mikeboers/pytomcrypt#readme

Cryptography (documentation) Ansprüche, mehrere Mängel von zu beheben PyCrypto, M2Crypto, und PyOpenSSL. Sie erwähnen nicht simple-crypt, Ein Hauptziel des Projekts ist es jedoch, hochrangige, sichere, einfach zu verwendende Schnittstellen zusammen mit einer Reihe von Schnittstellen auf niedrigerer Ebene (erhältlich aus einem „Hazmat“ -Modul) zu ermöglichen, die eine feinere Kontrolle für Entwickler ermöglichen, die die Fallstricke verstehen .

Nachdem ich die anderen Bibliotheken nicht benutzt habe, kann ich nicht kommentieren, ob die Kryptographie besser ist als die Alternativen, aber sie hat meine Bedürfnisse bisher sicherlich erfüllt.

Pycrypto hat einen Py3k -Zweig (in https://github.com/dlitz/pycrypto/tree/py3k)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top