[PHP] Szyfrowanie hasła
Aby zaszyfrować hasło w PHP można użyć jednej z kilku funkcji haszujących. Najpopularniejszymi funkcjami haszującymi są md5, sha1 i crypt. Jednak te dwie pierwsze nie są rekomendowane jako bezpieczne metody haszowania. Do bezpiecznego haszowania haseł należy używać funkcji password_hash.
Haszowanie przy użyciu password_hash
$password = 'hasło';
echo password_hash($password, PASSWORD_DEFAULT);
// wyświetli hash bcrypt hasła $password
Haszowanie przy użyciu md5
$password = '12345';
echo md5($password);
// Wyświetli '827ccb0eea8a706c4c34a16891f84e7b'
Haszowanie przy użyciu sha1
$password = '12345';
echo sha1($password);
// Wyświetli '8CB2237D0679CA88DB6464EAC60DA96345513964'
Haszowanie przy użyciu crypt
$password = 'hasło';
echo crypt($password);
// wyświetli hash crypt hasła $password z wygenerowaną automatycznie solą
Porównywanie haszy
Do porównania haszy wygenerowanych np. funkcją sha1 używa się funkcji hash_equals. Porownuje ona dwa ciągi hash zawsze w tym samym czasie niezależnie od tego czy są równe czy nie. Uwaga! Nigdy nie używaj operatora === do porównywania haszy.
Przykład:
$password_1 = sha1('12345'); $password_2 = sha1('12345'); $password_3 = sha1('1s4bod5'); hash_equals($password_1, $password_2);
// Zwróci TRUEhash_equals($password_1, $password_3);
// Zwróci FALSE
Weryfikowanie hasła
Aby zweryfikować zgodność podanego hasła z haszem wygenerowanym przez funkcję password_hash należy użyć funkcji password_verify. Jest to funkcja stworzona właśnie do współpracy z password_hash. Próba użycia innej metody porównania się nie powiedzie, ponieważ funkcja password_hash za każdym razem generuje inną sól.
Przykład
$hash = '$2y$12$RZksNLzUfNYKiLS4rXGaWeu0NlC0fnrrIHBm6RRdfl6/FunChELAG';
password_verify('123456', $hash);
// Zwróci TRUE, jeśli hasło jest poprawne
Jak w praktyce wygląda szyfrowanie i weryfikacja haseł można zobaczyć w artykule skrypt rejestracji.
Komentarze
Prześlij komentarz
Dzięki za komentarz!