2012-04-02 4 views
5

In Python verwende ich den folgenden Code eines Hash für Benutzer-Passwörter zu erstellen:Hash-String Größe

self.password = hmac.new(security_key, raw_password, sha1).hexdigest() 

Nun möchte Ich mag diesen Wert in der Datenbank speichern. Welche Größe muss meine Datenbankspalte sein? Es scheint mit Digest_size-Eigenschaft verwandt zu sein, aber nicht, welches Objekt oder welche Klasse über diese Eigenschaft verfügt. sha1 hat keinen.

+0

SHA-1 ist nicht die beste Wahl für einen Passwort-Hash. Es ist sehr schnell und es wird angenommen, dass es schwach ist (wenn es noch nicht kaputt ist). Best Practice ist etwas wie [bcrypt] (http://code.google.com/p/py-bcrypt/), aber wenn Sie an der Python-Standardbibliothek festhalten möchten, ist 'sha256' besser als' sha1'. –

Antwort

3

Die Ausgabe von hmac ist abhängig von dem verwendeten Hashalgorithmus. In Ihrem Fall wird sha1 verwendet, die immer eine 20 Bytes lange Byte-Zeichenfolge gemäß RFC2104 ausgibt. Durch Aufruf von hexdigest() wird die Bytezeichenfolge in ein druckbares Hexadezimalformat umgewandelt. 1 Byte = 2 Hexadezimalzahlen, also insgesamt 40 Hexadezimalzeichen. Sie können Ihre Datenbankspalte sicher auf char (40) setzen.

1

Die Ausgabe der sha-1-Hash-Funktion wird 20 Zeichen lang sein. (Nach RFC2104, durch die hmac python module docs referenzierten: "... L die Byte-Länge der Hash-Ausgänge (L = 16 für MD5, L = 20 für SHA-1).")

Sie können auch dies überprüfen, by:

Verwandte Themen