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.
person
Kristoffer Bohmann
schedule
23.10.2015