password_hash() zwraca za każdym razem inny ciąg znaków

0

Witam ! Mam pytanie dotyczące hashowania haseł przez skrypty PHP.

To jest mój kod:

<?php
$pass = "test123";

$hashedPass = password_hash($pass, PASSWORD_BCRYPT);

echo ($hashedPass);

?>

Czy to że za każdym odświeżeniem strony pojawia się inny napis ( hash ) ?
Raz jest to: $2y$10$g6HaMwouRwI5ngGX.wp2U.m016Sh1GwplA/WCRqtXjY.JDpEeC1iS
a innym razem to : $2y$10$vxSd7CgjuB22HepzxoTHy.8d/gAIebcohVV65KfgFgvEtEbCls1I

I czy takie coś jest bezpieczne i przy próbie pobrania tego z bazy danych, po rozszyfrowaniu tego na pewno hasło będzie to "test123" ?

2

password_hash za każdym razem dobiera do hasła pseudolosową sól; dzięki temu hash jest jeszcze bezpieczniejszy, ponieważ - jak sam zauważyłeś - każde wywołanie password_hash zwraca inny ciąg znaków (ergo: nie można łatwo dojść do informacji, że użytkownik A ma takie samo hasło (hash) jak użytkownik B).

Takie hashe możesz potem porównać z wykorzystaniem http://php.net/manual/en/function.password-verify.php.

po rozszyfrowaniu tego

Hash nie jest szyfrem - haszy się nie rozszyfrowuje.

0

Patryk27 password_hash używa soli, ale tej dostarczonej przez usera. Poczytaj phpdocs

3

Tak, przeczytałem dokumentację:

If omitted, a random salt will be generated by password_hash() for each password hashed. This is the intended mode of operation.

Dodatkowo:

The salt option has been deprecated as of PHP 7.0.0. It is now preferred to simply use the salt that is generated by default.

0

Tutaj jest kod który warto sobie przeanalizować:
https://gist.github.com/fguillot/7df83468fa1a8a7152bd

1 użytkowników online, w tym zalogowanych: 0, gości: 1