Zgodnie z crypt() documentation, sól musi mieć 22 podstawowe 64 cyfry z alfabetu "./0-9A-Za-z".Blowfish długość soli dla funkcji Crypt()?
To jest przykładowy kod dają:
crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
Pierwszy mylące jest to, że sól ma 25 znaków, a nie 22.
Pytanie # 1: Czy to znaczy sól ma być dłużej niż niż 22 znaki?
Potem sam testowałem funkcję i zauważyłem coś. Jeśli używam soli 20 znaków, otrzymuję ten
// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2
Więc kiedy stosować sól 20 znaków, cała sól jest na wyjściu. Co jest wygodne, ponieważ nie muszę przechowywać soli w oddzielnym miejscu. (Chcę użyć losowych soli). Byłbym w stanie odczytać sól z wygenerowanego hasha.
Jednakże, jeśli używam soli 22-znakowej, jak mówi dokumentacja, lub dłuższej, sól jest odcięta na końcu.
// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone
// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash
Pytanie # 2: Więc, co dokładnie jest właściwa długość soli? 20? 22? Dłużej?
Pytanie # 3: Czy warto czytać sól z hasha, gdy trzeba sprawdzić hasła? Zamiast przechowywać sól w oddzielnym polu i czytać ją stamtąd. (Co wydaje się zbędne, ponieważ sól wydaje się być zawarta w hashu).
CRYPT_SALT_LENGTH zwraca 60 na moim komputerze Win7, 123 w systemie Ubuntu. –
@Burak Guzel: Zgodnie z instrukcją ** PHP ustawia stałą o nazwie 'CRYPT_SALT_LENGTH' która wskazuje najdłuższą dopuszczalną sól dozwoloną przez dostępne hasze **. –
@Burak Guzel: CRYPT_SALT_LENGTH zwraca 60 do PHP 5.3.1, ale 123 z 5.3.2. Wynika to z faktu, że SHA-256 (sól o długości 64 karatów) i SHA-512 (sól o długości 123 karatów) zostały wprowadzone z PHP 5.3.2. – Sliq