[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
<?php
$password = 'hasło';
echo password_hash($password, PASSWORD_DEFAULT); // Wyświetli hash bcrypt hasła $password
Haszowanie przy użyciu md5
<?php
$password = '12345';
echo md5($password); // Wyświetli '827ccb0eea8a706c4c34a16891f84e7b'
Haszowanie przy użyciu sha1
<?php
$password = '12345';
echo sha1($password); // Wyświetli '8CB2237D0679CA88DB6464EAC60DA96345513964'
Haszowanie przy użyciu crypt
<?php
$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:
<?php
$password_1 = sha1('12345');
$password_2 = sha1('12345');
$password_3 = sha1('1s4bod5');
hash_equals($password_1, $password_2); // Zwróci TRUE
hash_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
<?php
$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!