Aktualizacja:samo użycie funkcji skrótu nie jest wystarczająco silne do przechowywania haseł. Powinieneś przeczytać odpowiedź Gillesa w tym wątku dla bardziej szczegółowego wyjaśnienia.
W przypadku haseł użyj algorytmu skrótu wzmacniającego klucz, takiego jak Bcrypt lub Argon2i. Na przykład w PHP użyj funkcji password_hash() , który domyślnie używa Bcrypt.
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
Wynikiem jest 60-znakowy ciąg podobny do poniższego (ale cyfry będą się różnić, ponieważ generuje unikalną sól).
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Użyj typu danych SQL CHAR(60)
do przechowywania tego kodowania skrótu Bcrypt. Zauważ, że ta funkcja nie koduje jako ciągu cyfr szesnastkowych, więc nie możemy tak łatwo rozszyfrować go, aby zapisać w postaci binarnej.
Inne funkcje skrótu nadal mają zastosowanie, ale nie do przechowywania haseł, więc zachowam oryginalną odpowiedź poniżej, napisaną w 2008 roku.
Zależy to od używanego algorytmu mieszającego. Haszowanie zawsze daje wynik o tej samej długości, niezależnie od danych wejściowych. Typowe jest przedstawianie binarnego wyniku skrótu w tekście jako seria cyfr szesnastkowych. Możesz też użyć UNHEX()
funkcja zmniejszająca ciąg cyfr szesnastkowych o połowę.
- MD5 generuje 128-bitową wartość skrótu. Możesz użyć CHAR(32) lub BINARY(16)
- SHA-1 generuje 160-bitową wartość skrótu. Możesz użyć CHAR(40) lub BINARY(20)
- SHA-224 generuje 224-bitową wartość skrótu. Możesz użyć CHAR(56) lub BINARY(28)
- SHA-256 generuje 256-bitową wartość skrótu. Możesz użyć CHAR(64) lub BINARY(32)
- SHA-384 generuje 384-bitową wartość skrótu. Możesz użyć CHAR(96) lub BINARY(48)
- SHA-512 generuje 512-bitową wartość skrótu. Możesz użyć CHAR(128) lub BINARY(64)
- BCrypt generuje zależną od implementacji 448-bitową wartość skrótu. Ty może potrzebować CHAR(56), CHAR(60), CHAR(76), BINARY(56) lub BINARY(60)
Od 2015 r. NIST zaleca używanie SHA-256 lub wyżej dla wszelkich zastosowań funkcji skrótu wymagających interoperacyjności. Ale NIST nie zaleca używania tych prostych funkcji skrótu do bezpiecznego przechowywania haseł.
Mniejsze algorytmy haszujące mają swoje zastosowania (jak wewnętrzne w aplikacji, a nie do wymiany), ale są to wiadomo, że można je złamać .