password_hash і password_verify онлайн
Генерує хеш bcrypt або argon2id і перевіряє пароль проти наявного хеша.
Дає справжній хеш, а не імітацію на JavaScript
Потрібно швидко зробити хеш для сіду, тестового користувача або міграції, і важливо, щоб він точно приймався password_verify у PHP. Цей інструмент викликає справжній PHP, тому хеш сумісний з вашим застосунком. Друге поле перевіряє наявний хеш проти пароля: зручно, коли вхід не працює і треба зрозуміти, у хешу чи в паролі проблема.
password_hash сам генерує сіль і вкладає її в результат разом з алгоритмом і його параметрами, тому окремої колонки для солі не потрібно, а два хеші того самого пароля виглядають різними. password_verify дістає параметри з хеша й перевіряє, тому старі хеші продовжують працювати після зміни cost.
$hash = password_hash($password, PASSWORD_DEFAULT);
// $2y$12$KIXQKr8Xf7… : сіль уже всередині
if (password_verify($password, $hash)) {
// а тут одразу перехешуйте, якщо параметри застаріли
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$user->update(['password' => password_hash($password, PASSWORD_DEFAULT)]);
}
}
Не вставляйте сюди бойові паролі користувачів. Пароль передається на сервер, щоб PHP міг порахувати хеш: по HTTPS, без логів і без збереження, але для реальних облікових записів усе одно правильніше зробити це командою в консолі свого проєкту.
Що питають про цей інструмент
argon2id сучасніший і стійкіший до атак на GPU, бо вимагає ще й памʼяті, а не тільки процесора. bcrypt перевірений роками, доступний скрізь, і його достатньо для більшості проєктів. Якщо починаєте з нуля й хостинг дозволяє, беріть argon2id; якщо у вас уже bcrypt, міняти лише заради зміни не варто.
Такий, щоб хешування займало приблизно 100–250 мілісекунд на вашому продакшен-залізі. Інструмент показує, скільки зайняло на нашому сервері. Менше небезпечно, більше робить вхід вектором для відмови в обслуговуванні: атакуючий надсилає сотні запитів і завантажує процесор.
Бо сіль генерується випадково для кожного виклику й записується в сам хеш. Це навмисно: інакше однакові паролі мали б однакові хеші, і зламавши один, атакуючий отримав би всі акаунти з таким паролем. Тому хеші не порівнюють рядковою рівністю, тільки password_verify.