password_hash()
доступен в PHP 5.5 и новее.Я удивлен, узнав, что это здесь не упоминается.
С password_hash () нет необходимости генерировать соль, так как соль генерируется автоматически с использованием алгоритма bcrypt - и, следовательно, нет необходимости создаватьнабор символов.
Вместо этого пароль пользователя сравнивается с хэшем уникального пароля, хранящимся в базе данных, с помощью password_verify ().Просто сохраните имя пользователя и хэш пароля в таблице базы данных пользователей, и вы сможете сравнить их с паролем, введенным пользователем, с помощью password_verify ().
Как работает хэш пароля ():
Функция password_hash () выводит уникальный хэш пароля при хранении строки в базе данных - рекомендуется, чтобы столбец допускал до 255 символов.
$password = "goat";
echo password_hash($password, PASSWORD_DEFAULT);
echo password_hash($password, PASSWORD_DEFAULT);
echo password_hash($password, PASSWORD_DEFAULT);
// Output example (store this in the database)
$2y$10$GBIQaf6gEeU9im8RTKhIgOZ5q5haDA.A5GzocSr5CR.sU8OUsCUwq <- This hash changes.
$2y$10$7.y.lLyEHKfpxTRnT4HmweDKWojTLo1Ra0hXXlAC4ra1pfneAbj0K
$2y$10$5m8sFNEpJLBfMt/3A0BI5uH4CKep2hiNI1/BnDIG0PpLXpQzIHG8y
Чтобы проверить хешированный пароль, выиспользуйте password_verify()
:
$password_enc = password_hash("goat", PASSWORD_DEFAULT);
dump(password_verify('goat', $password_enc)); // TRUE
dump(password_verify('fish', $password_enc)); // FALSE
Если вы предпочитаете, соль может быть добавлена вручную в качестве опции, например, так:
$password = 'MyPassword';
$salt = 'MySaltThatUsesALongAndImpossibleToRememberSentence+NumbersSuch@7913';
$hash = password_hash($password, PASSWORD_DEFAULT, ['salt'=>$salt]);
// Output: $2y$10$TXlTYWx0VGhhdFVzZXNBT.ApoIjIiwyhEvKC9Ok5qzVcSal7T8CTu <- This password hash not change.