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

Welchen Spaltentyp/welche Spaltenlänge sollte ich zum Speichern eines Bcrypt-Hash-Passworts in einer Datenbank verwenden?

Das modulare crypt-Format für bcrypt besteht aus

  • $2$ , $2a$ oder $2y$ Identifizieren des Hashing-Algorithmus und -Formats
  • ein zweistelliger Wert, der den Kostenparameter angibt, gefolgt von $
  • ein 53 Zeichen langer Base-64-codierter Wert (sie verwenden das Alphabet . , / , 09 , AZ , az das unterscheidet sich von der Standard-Base-64-Kodierung Alphabet) bestehend aus:
    • 22 Salt-Zeichen (effektiv nur 128 Bits der 132 dekodierten Bits)
    • 31 Zeichen der verschlüsselten Ausgabe (effektiv nur 184 Bits der 186 dekodierten Bits)

Die Gesamtlänge beträgt also 59 bzw. 60 Byte.

Da Sie das 2a-Format verwenden, benötigen Sie 60 Bytes. Und daher empfehle ich für MySQL, den <-Code zu verwenden>CHAR(60) BINARY oder BINARY(60) (siehe Die _bin und binär Sammlungen für Informationen über den Unterschied).

CHAR ist nicht binärsicher und die Gleichheit hängt nicht nur vom Bytewert ab, sondern von der tatsächlichen Sortierung; im schlimmsten Fall A wird wie a behandelt . Siehe Der _bin und binär Sammlungen für weitere Informationen.