2010-02-23 14 views
9

Ich erstelle Hash-Passwörter mit gesalzenem sha1 in PHP.Hash-Passwörter in MySQL speichern

Meine Frage ist: In MySQL, was ist die richtige Zeichencodierung, Feldtyp & Länge, um das Ergebnis zu speichern?

Gibt es in MySQL noch etwas, das für die Passwortsicherheit in Frage kommt? Schließlich sind SHA256 oder SHA512 praktische Hash-Optionen?

Antwort

5

Für einen SHA1-Hash wäre CHAR (40) der optimale Feldtyp und die optimale Länge. Die Zeichencodierung sollte nicht viel ausmachen, alle Zeichen liegen im ASCII-Bereich. Ich würde aus Konsistenzgründen mit dem gleichen Zeichensatz wie der Rest der Datenbank arbeiten.

12

Die SHA-2-Algorithmen (SHA-256, SHA-512) sind gültige Optionen; Sie benötigen jedoch mehr Speicherplatz. Um beispielsweise die Hexadezimalziffern für SHA-256 zu speichern, benötigen Sie ein Feld CHAR (64). Es gab einige Fragen darüber, ob SHA-1 "gebrochen" ist Schneier discussed it und NIST commented. Wenn diese Sie betreffen, ist es möglicherweise besser, eine der SHA-2-Funktionen zu verwenden.

Wenn Sie die Kosten für einen Brute-Force-Angriff erhöhen möchten, können Sie auch einige Iterationen mit einem Algorithmus wie PBKDF2 hinzufügen. Jemand hat ein Beispiel here in the comments gepostet.

+0

"Um beispielsweise die Hexadezimalziffern für SHA-256 zu speichern, benötigen Sie ein Feld CHAR (64)." Kannst du das erklären? Vielen Dank. – JDelage

+2

@JDelage: Ich habe mich nur auf die Anzahl der Hexadezimalziffern bezogen, die zum Speichern benötigt werden. Die Ausgabe ist 256 Bit => 32 Byte => 64 Hexadezimalziffern. Wenn der Speicher ein Problem darstellte, könnte er in einer Art Raw/Binary-Feldtyp in 32 Bytes gespeichert werden. –