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.
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.
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
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'
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'
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).
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.