Jakiego typu danych użyć dla pola hashed password i jakiej długości?
Nie jestem pewien, jak działa haszowanie haseł( zaimplementuje je później), ale muszę teraz utworzyć schemat bazy danych.
Myślę o ograniczeniu haseł do 4-20 znaków, ale jak rozumiem po zaszyfrowaniu hash string będzie różnej długości.
Jak przechowywać te hasła w bazie danych?
9 answers
To zależy od algorytmu haszującego, którego używasz. Hashowanie zawsze daje wynik o tej samej długości, niezależnie od danych wejściowych. Typowe jest reprezentowanie binarnego wyniku skrótu w tekście, jako serii cyfr szesnastkowych. Lub możesz użyć UNHEX()
funkcja zmniejszania ciągu cyfr sześciokątnych 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żna 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żna 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. możesz potrzebować CHAR(56), CHAR(60), CHAR(76), BINARY(56) lub BINARY(60)
NIST zaleca stosowanie SHA-256 lub wyższej dla haseł. Mniejsze algorytmy haszujące mają swoje zastosowania, ale są one znane z możliwości złamania .
Powinieneś posolić swoje hasła przed zastosowaniem funkcji haszującej. Zasolenie hasła nie wpływa na długość wyniku skrótu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:30
Możesz użyć CHAR(length of hash), aby zdefiniować swój typ danych dla MySQL, ponieważ każdy algorytm haszujący zawsze będzie obliczał tę samą liczbę znaków. Na przykład, SHA1 zawsze zwraca 40-znakową liczbę szesnastkową.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:53:24
Jako łańcuch o stałej długości (VARCHAR(n) lub jakkolwiek nazywa to MySQL). Hash ma zawsze stałą długość, na przykład 12 znaków (w zależności od używanego algorytmu hashowego). Tak więc 20-znakowe hasło zostanie zredukowane do 12-znakowego hasha, a 4-znakowe hasło również da 12-znakowy hash.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:47:20
Ten artykuł na Wikipedii o soleniu jest wart uwagi . Chodzi o to, aby dodać określony bit danych w celu losowej wartości skrótu; to ochroni Twoje hasła przed atakami słownikowymi, jeśli ktoś uzyska nieautoryzowany dostęp do hashów hasła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:50:12
Hasze są sekwencją bitów (128 bitów, 160 bitów, 256 bitów itd., w zależności od algorytmu). Jeśli MySQL na to pozwala (typ danych serwera SQL to binary(n)
LUB varbinary(n)
), twoja kolumna powinna być wpisywana binarnie, a nie tekstowo. Powinieneś także posolić hasze. Sole mogą być tekstowe lub binarne i będziesz potrzebował odpowiedniej kolumny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:59:51
To naprawdę zależy od algorytmu haszującego, którego używasz. Długość hasła ma niewiele wspólnego z długością hasha, o ile dobrze pamiętam. Sprawdź specyfikacje algorytmu haszującego, którego używasz, wykonaj kilka testów i obcinaj tuż powyżej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:54:33
Dla md5 VARCHAR (32) jest odpowiedni. Dla tych, którzy używają AES lepiej użyć varbinary.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-29 07:05:52
Zawsze testowałem, aby znaleźć maksymalną długość łańcucha zaszyfrowanego i ustawić ją jako długość znaku typu VARCHAR. W zależności od tego, ile rekordów będziesz miał, może to naprawdę pomóc w rozmiarze bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 15:48:06
Powinieneś użyć TEXT
(przechowując nieograniczoną liczbę znaków) ze względu na kompatybilność do przodu. Algorytmy haszujące (muszą) z czasem stają się silniejsze i dlatego to pole bazy danych będzie musiało obsługiwać więcej znaków w czasie. Dodatkowo w zależności od strategii migracji może być konieczne przechowywanie nowych i starych skrótów w tym samym polu, dlatego nie zaleca się ustalania długości do jednego rodzaju skrótu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 22:32:03