Jak dla mnie na razie najbardziej pasuje funkcja string hash ( string $algo , string $data ), produkuje ona zawsze ten sam hash o pewnej długości czyli to co poszukuję np:
Kod: Zaznacz cały
echo hash('md5', 'alamakota' );
Na przykład taka funkcja password_hash('alamakota', PASSWORD_DEFAULT); ale ona produkuje za każdym razem co innego ! Więc po co mi taki hash którego nie moge porównać ?!
Najciekawsze w tym jest to, że piszą iż można go porównać za pomocą funkcji password_verify ( string $password , string $hash ), tylko najciekawsze w tym jest jeszcze raz to, że te porównania u mnie nie działają. Abstrahując od tego że na mój cel to nie jest rozwiązanie którego szukam, bo jeszcze raz podkreślę potrzebuje zawsze ten sam hash, to tak czytając i zagłębiając się trafiłem na to i mnie to dziwi. Co mi z hasha którego nie moge porównać, po co mi takie coś ???
I tak dla przykładu:
Kod: Zaznacz cały
//produkujemy pierwszy hash
echo $aa = password_hash('alamakota', PASSWORD_DEFAULT);
echo $aa = '<br>';
//produkujemy drugi hash
echo $bb = password_hash('alamakota', PASSWORD_DEFAULT);
echo $aa = '<br>';
//porównujemy hashe
echo password_verify($bb, $aa)?'te same hashe':'nie te same hashe';
Kod: Zaznacz cały
$2y$10$sRiagMqvxIIzF.WS6XuNDeltKqPNPP4.5cA/tuxwnV8DUMrgqdxZa
$2y$10$.OEWhTN71c5kzpOLLOg/juTDjqByvBUkvMRW5L2vUrul0fTk1z3/y
nie te same hashe
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
Kod: Zaznacz cały
//$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; - to jest źle
$hash = password_hash( 'rasmuslerdorf' , PASSWORD_DEFAULT);
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
Okazuje się że w tym drugim przypadku jest błąd na stronie PHP. Zamiast hasha trzeba wstawić linię produkującą hash i wtedy bedzie działać co jest zgodne z opisem. Przykład poprawiłem.
Kody wklejamy na ta strone żeby sprawdzić ich działanie:
http://phptester.net