Zamierzam uruchomić SHA256hasło + sól, ale nie wiem, jak długo muszę to robić VARCHARpodczas konfigurowania bazy danych MySQL. Jaka jest dobra długość?
Zanim ktokolwiek to przeczyta, zdecyduje się zastosować się do tej rady i użyć SHA-*hasła mieszającego, PROSZĘ przeczytaj to najpierw .
c00000fd
2
O ile nie używasz SHA-256 do haseł, czego nie powinieneś robić, skróty mają długość 256 bitów lub 64 znaków szesnastkowych lub 43 znaków alfanumerycznych lub 32 bajtów.
caw
Odpowiedzi:
335
Sha256 ma 256 bitów długości - jak wskazuje jego nazwa.
Ponieważ sha256 zwraca reprezentację szesnastkową, 4 bity wystarczą do zakodowania każdego znaku (zamiast 8, jak w ASCII), więc 256 bitów reprezentuje 64 znaki szesnastkowe, dlatego potrzebujesz varchar(64), a nawet a char(64), ponieważ długość jest zawsze taka sama , wcale się nie zmienia.
czy możemy użyć char (64) jako klucza podstawowego, czy może binarne (32) będzie do tego lepsze? (
access_token
3
Jeśli uważasz, że w przyszłości zechcesz zablokować użytkownika, sugeruję użyć słowa varchar(65)wiodącego !... po prostu mówiąc.
Manatax
103
... lub po prostu dodać kolumnę „zablokowaną”?
Stijn de Witt
5
Jeśli chcesz mieć inną sól dla każdego hasła, musisz przechowywać to obok skrótu. W tym celu możesz użyć dodatkowego pola lub wstępnie / dołączyć go do skrótu, więc będziesz potrzebować więcej niż 64 znaków
Patrick Cornelissen
4
możesz użyć tej instrukcji select do jej przetestowania: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))zawsze ma ona wartość 44 bez względu na długość oryginalnego łańcucha.
DrAhmedJava,
72
Opcje kodowania 256 bitów SHA256:
Base64: 6 bitów na znak = CHAR(44)łącznie ze znakiem dopełniania
Base64 ma 3 bajty na 4 znaki, więc mimo że 32 bajty mieszczą się w 43 znakach, tak naprawdę potrzebujesz 44. Dodatkowe = jest dodawane jako znak końcowy
Wilco
2
Cóż, =można go rozebrać i ponownie dodać.
Rick James
28
Wolę używać BINARY (32), ponieważ jest to zoptymalizowany sposób!
Możesz umieścić w nich 32 cyfry szesnastkowe od (00 do FF).
+1 - Lubię zoptymalizowane ... dla każdego, kto się przy tym dzieje ... aby użyć tego z MySQL ... możesz użyć UPDATE...SET hash_column=UNHEX(sha256HexString). Następnie, podczas odzyskiwania, ty SELECT HEX(hash_column) AS hash_column.
@hatorade: Nie, to nie jest instrukcja, ale prawidłowy typ kolumny.
Mark Byers
10
varchar również nie przydziela miejsca, chyba że jest używane, w przeciwieństwie do char przydziela liczbę dozwolonych znaków ogółem, niezależnie od tego, czy wypełniają je dane.
SHA-*
hasła mieszającego, PROSZĘ przeczytaj to najpierw .Odpowiedzi:
Sha256 ma 256 bitów długości - jak wskazuje jego nazwa.
Ponieważ sha256 zwraca reprezentację szesnastkową, 4 bity wystarczą do zakodowania każdego znaku (zamiast 8, jak w ASCII), więc 256 bitów reprezentuje 64 znaki szesnastkowe, dlatego potrzebujesz
varchar(64)
, a nawet achar(64)
, ponieważ długość jest zawsze taka sama , wcale się nie zmienia.I demo:
Da tobie :
tzn. ciąg znaków o długości 64 znaków.
źródło
varchar(65)
wiodącego!
... po prostu mówiąc.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
zawsze ma ona wartość 44 bez względu na długość oryginalnego łańcucha.Opcje kodowania 256 bitów SHA256:
CHAR(44)
łącznie ze znakiem dopełnianiaCHAR(64)
BINARY(32)
źródło
=
można go rozebrać i ponownie dodać.Wolę używać BINARY (32), ponieważ jest to zoptymalizowany sposób!
Możesz umieścić w nich 32 cyfry szesnastkowe od (00 do FF).
Dlatego BINARY (32)!
źródło
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Następnie, podczas odzyskiwania, tySELECT HEX(hash_column) AS hash_column
.Dlaczego miałbyś to zrobić VARCHAR? To się nie zmienia. To zawsze 64 znaki, które można ustalić, uruchamiając cokolwiek w jednym z internetowych kalkulatorów SHA-256 .
źródło
Zostanie naprawione 64 znaki, więc użyj
char(64)
źródło
CHARACTER SET ascii
.