45 Stimmen

Hashing in SHA512 unter Verwendung eines Salzes? - Python

Ich habe durch ths hashlib Dokumentation suchen, aber nicht gefunden alles reden über die Verwendung von Salz wenn Hashing Daten.

Hilfe wäre großartig.

84voto

Rakis Punkte 7629

Die Antwort von Samir ist richtig, aber etwas kryptisch. Im Grunde ist das Salt nur ein zufällig abgeleitetes Datenbit, das Sie Ihren Daten voran- oder nachstellen, um die Komplexität eines Wörterbuchangriffs auf Ihren gehashten Wert drastisch zu erhöhen. Bei einem Salt also s und Daten d würden Sie einfach folgendes tun, um einen gesalzenen Hash der Daten zu erzeugen:

import hashlib
hashlib.sha512( s + d ).hexdigest()

Ver esto Wikipedia-Artikel für weitere Einzelheiten

19voto

Jason Leveille Punkte 1150

Fügen Sie einfach das Salz zu Ihren sensiblen Daten hinzu:

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'

12voto

Samir Talwar Punkte 13982

Salting ist kein magischer Prozess, bei dem die Bibliothek Ihnen helfen muss - es sind nur zusätzliche Daten, die bereitgestellt werden, um zu verhindern, dass Rainbow-Tabellen funktionieren.

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'

7voto

tc. Punkte 33176

Wenn Sie nach einem Ersatz für crypt() suchen, haben neuere Versionen der Glibc SHA-512-basierte "$6$" mit einer variablen Iterationszahl (siehe Ulrich Drepper's Seite mit einer Beschreibung und Links zu einer vollständigen C-Implementierung von sha512_crypt_r() ).

Vom Schreiben eigener Kryptowährungen ist dringend abzuraten - die oben genannten sha512(salt+password) hilft nicht gegen einen Brute-Force-Angriff.

Um Salz zu erzeugen, verwenden Sie etwas wie os.urandom(16) für Zufallsbytes oder ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) für zufällige base64-ähnliche Zeichen (zur Verwendung mit crypt()-Alikes).

(Ich sage base64-ähnlich, weil es nicht dasselbe ist wie das Base64 in PEM/MIME).

3voto

Thomas Waldmann Punkte 461

Passlib verwenden, ist das Schreiben einer eigenen Passwortverschlüsselung ein fast sicherer Weg zum Scheitern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X