Ich werde mit SHA256einem Passwort + Salt arbeiten, aber ich weiß nicht, wie lange ich es VARCHARbeim Einrichten der MySQL-Datenbank machen soll. Was ist eine gute Länge?
Sofern Sie SHA-256 nicht für Kennwörter verwenden, was Sie nicht tun sollten, haben die Hashes eine Länge von 256 Bit oder 64 hexadezimalen Zeichen oder 43 alphanumerischen Zeichen oder 32 Bytes.
Caw
Antworten:
331
Ein sha256 ist 256 Bit lang - wie der Name schon sagt.
Da sha256 eine hexadezimale Darstellung zurückgibt, reichen 4 Bit aus, um jedes Zeichen zu codieren (anstelle von 8, wie bei ASCII). 256 Bit würden also 64 hexadezimale Zeichen darstellen. Daher benötigen Sie ein varchar(64)oder sogar ein char(64), da die Länge immer gleich ist überhaupt nicht variierend.
Können wir char (64) als Primärschlüssel verwenden oder ist binär (32) dafür besser? (access_token)
Frankish
3
Wenn Sie glauben, dass Sie in Zukunft einen Benutzer blockieren möchten, schlage ich vor, ihn varchar(65)für einen führenden Benutzer zu verwenden !.
Manatax
103
... oder einfach eine Spalte 'blockiert' hinzufügen?
Stijn de Witt
5
Da Sie für jedes Passwort ein anderes Salt haben möchten, müssen Sie dieses neben dem Hash speichern. Hierfür können Sie ein zusätzliches Feld verwenden oder es vor / an den Hash anhängen, sodass Sie mehr als 64 Zeichen benötigen
Patrick Cornelissen
4
Sie können diese select-Anweisung verwenden, um sie zu testen: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))Es ist immer 44, unabhängig von der Länge der ursprünglichen Zeichenfolge.
DrAhmedJava
72
Codierungsoptionen für die 256 Bit von SHA256:
Base64: 6 Bits pro CHAR(44)Zeichen = einschließlich Füllzeichen
Base64 besteht aus 3 Bytes pro 4 Zeichen. Obwohl 32 Bytes in 43 Zeichen passen, benötigen Sie tatsächlich 44. Ein zusätzliches = wird als letztes Zeichen hinzugefügt
Wilco
2
Nun, das =kann abgestreift und wieder hinzugefügt werden.
Rick James
28
Ich bevorzuge BINARY (32), da dies der optimierte Weg ist!
Sie können in diese 32 hexadezimalen Ziffern von (00 bis FF) setzen.
+1 - Ich mag optimiert ... für alle anderen, die dies tun ... um dies mit MySQL zu verwenden ... können Sie verwenden UPDATE...SET hash_column=UNHEX(sha256HexString). Dann, wenn Sie es abrufen, Sie SELECT HEX(hash_column) AS hash_column.
@hatorade: Nein, es ist keine Anweisung, aber es ist ein gültiger Spaltentyp.
Mark Byers
10
varchar weist auch keinen Speicherplatz zu, es sei denn, es wird verwendet. Im Gegensatz zu char weist es die Anzahl der zulässigen Gesamtzeichen zu, unabhängig davon, ob Daten vorhanden sind, die es füllen.
Xenland
6
Es werden 64 Zeichen behoben, also verwenden char(64)
SHA-*
Passwörter zu hashen, lesen Sie dies bitte zuerst .Antworten:
Ein sha256 ist 256 Bit lang - wie der Name schon sagt.
Da sha256 eine hexadezimale Darstellung zurückgibt, reichen 4 Bit aus, um jedes Zeichen zu codieren (anstelle von 8, wie bei ASCII). 256 Bit würden also 64 hexadezimale Zeichen darstellen. Daher benötigen Sie ein
varchar(64)
oder sogar einchar(64)
, da die Länge immer gleich ist überhaupt nicht variierend.Und die Demo:
Werde dir geben :
dh eine Zeichenfolge mit 64 Zeichen.
quelle
varchar(65)
für einen führenden Benutzer zu verwenden!
.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
Es ist immer 44, unabhängig von der Länge der ursprünglichen Zeichenfolge.Codierungsoptionen für die 256 Bit von SHA256:
CHAR(44)
Zeichen = einschließlich FüllzeichenCHAR(64)
BINARY(32)
quelle
=
kann abgestreift und wieder hinzugefügt werden.Ich bevorzuge BINARY (32), da dies der optimierte Weg ist!
Sie können in diese 32 hexadezimalen Ziffern von (00 bis FF) setzen.
Deshalb BINARY (32)!
quelle
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Dann, wenn Sie es abrufen, SieSELECT HEX(hash_column) AS hash_column
.Warum würdest du es VARCHAR machen? Es variiert nicht. Es sind immer 64 Zeichen, die ermittelt werden können, indem etwas in einen der Online-SHA-256-Rechner eingegeben wird .
quelle
Es werden 64 Zeichen behoben, also verwenden
char(64)
quelle
CHARACTER SET ascii
.