Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welcher Datentyp soll für das gehashte Passwortfeld verwendet werden und welche Länge?

Update:Die einfache Verwendung einer Hash-Funktion ist nicht stark genug, um Passwörter zu speichern. Sie sollten die Antwort von Gilles in diesem Thread lesen für eine ausführlichere Erklärung.

Verwenden Sie für Passwörter einen schlüsselstärkenden Hash-Algorithmus wie Bcrypt oder Argon2i. Verwenden Sie beispielsweise in PHP die password_hash()-Funktion , die standardmäßig Bcrypt verwendet.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

Das Ergebnis ist eine Zeichenfolge mit 60 Zeichen, die der folgenden ähnelt (aber die Ziffern variieren, da ein eindeutiges Salt generiert wird).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Verwenden Sie den SQL-Datentyp CHAR(60) um diese Kodierung eines Bcrypt-Hashes zu speichern. Beachten Sie, dass diese Funktion nicht als Zeichenfolge aus hexadezimalen Ziffern codiert wird, sodass wir sie nicht so einfach enthexen können, um sie binär zu speichern.

Andere Hash-Funktionen haben immer noch Verwendung, aber nicht zum Speichern von Passwörtern, also behalte ich die ursprüngliche Antwort unten, geschrieben im Jahr 2008.

Dies hängt vom verwendeten Hash-Algorithmus ab. Hashing liefert unabhängig von der Eingabe immer ein Ergebnis gleicher Länge. Es ist üblich, das binäre Hash-Ergebnis im Text als eine Reihe von Hexadezimalziffern darzustellen. Oder Sie können den UNHEX() Funktion, um eine Folge von Hexadezimalziffern um die Hälfte zu reduzieren.

  • MD5 generiert einen 128-Bit-Hashwert. Sie können CHAR(32) oder BINARY(16)
  • verwenden
  • SHA-1 generiert einen 160-Bit-Hashwert. Sie können CHAR(40) oder BINARY(20)
  • verwenden
  • SHA-224 generiert einen 224-Bit-Hashwert. Sie können CHAR(56) oder BINARY(28)
  • verwenden
  • SHA-256 generiert einen 256-Bit-Hashwert. Sie können CHAR(64) oder BINARY(32)
  • verwenden
  • SHA-384 generiert einen 384-Bit-Hashwert. Sie können CHAR(96) oder BINARY(48)
  • verwenden
  • SHA-512 generiert einen 512-Bit-Hashwert. Sie können CHAR(128) oder BINARY(64)
  • verwenden
  • BCrypt generiert einen implementierungsabhängigen 448-Bit-Hashwert. Sie benötigt möglicherweise CHAR(56), CHAR(60), CHAR(76), BINARY(56) oder BINARY(60)

Ab 2015 empfiehlt NIST die Verwendung von SHA-256 oder höher für alle Anwendungen von Hash-Funktionen, die Interoperabilität erfordern. NIST empfiehlt jedoch nicht, diese einfachen Hash-Funktionen zum sicheren Speichern von Passwörtern zu verwenden.

Geringere Hashing-Algorithmen haben ihre Verwendung (z. B. intern in einer Anwendung, nicht zum Austausch), aber sie sind als knackbar bekannt .