Frage

Ich bin ein wenig verwirrt, dass das Argument für Krypto-Funktionen eine Zeichenfolge ist. Soll ich einfach nicht-String-Argumente mit str wickeln () z.

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(für den Moment ignorieren, die random.randbits () möglicherweise nicht kryptographisch gut sein). edit: Ich weiß, dass das hmac Beispiel dumm ist, weil ich nicht den Schlüssel irgendwo speichern

!
War es hilfreich?

Lösung

Nun, in der Regel Hash-Funktionen (und Verschlüsselungsfunktionen im Allgemeinen) auf Bytes arbeiten. Die Python-Strings sind im Grunde Byte-Strings. Wenn Sie den Hash eines Objekts berechnen wollen, müssen Sie es auf eine String-Darstellung konvertieren. So stellen Sie sicher, dass später die gleiche Operation anwenden, wenn Sie überprüfen möchten, ob der Hash korrekt ist. Und stellen Sie sicher, dass Ihre String-Darstellung keine Änderung von Daten enthält, die Sie nicht wollen, überprüft werden.

Edit: Aufgrund der großen Anfrage einer kurzen Erinnerung daran, dass Python Unicode-Strings enthalten keine Bytes aber Unicode-Codepunkte. Jeder Unicode-Codepunkt enthält mehrere Bytes (2 oder 4, je nachdem, wie das Python-Interpreter kompiliert wurde). Python-Strings enthalten nur Bytes. So Python Strings (Typ str ) ist die Art am ähnlichsten ein Array von Bytes.

Andere Tipps

Sie können.

Doch für die HMAC, wollen Sie tatsächlich den Schlüssel irgendwo zu speichern. später Ohne den Schlüssel, gibt es keine Möglichkeit für Sie, den Hash-Wert zu überprüfen. : -)

Oh und Sha256 ist nicht wirklich eine industrielle Stärke Verschlüsselungsfunktion (obwohl es leider auf vielen Seiten sehr häufig verwendet wird). Es ist keine wirkliche Möglichkeit, Passwörter oder andere wichtige Daten zu schützen, aber mehr als gut genug für die Erzeugung zeitliche Token

Edit: Wie bereits erwähnt Sha256 muss mindestens etwas Salz. Ohne Salz hat Sha256 eine niedrige Barriere mit einem Wörterbuch-Angriff geknackt zu werden (zeitweise) und es gibt viele von Rainbow-Tabellen als auch zu verwenden. Persönlich würde ich nichts weniger als Blowfish für Passwörter verwenden (aber das ist, weil ich paranoid bin)

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