hash и password_hash - это не хэш функции, раз на то пошло. Это более высокоуровневый инструмент. Под капотом там одно и то же. Но password_hash сделан, как говорится, "для людей". password_ инструментарий как бы в своем названии уже содержит намек, для чего он нужен.
а зачем вообще как то сложно хешировать пароли?? кто то может сказать? почему обычной md5 не хватает? зачем все это? если получат доступ к БД до тут уже пофиг насколько хеширован пароль.. все равно уже получили.. а так смысл какой?
@Алекс8 это не всегда так. Если был взлом и что-то сломали, то можно прикрыть дыру и восстановиться из бэкапа, и не бояться что пострадают пользователи.
Есть радужные таблицы md5 самых распространённых паролей - это раз, md5 работает слишком быстро, не создавая злоумышленнику тормозов при брутфорсе, это два.
так md5 все равно не расшифровать... а радужные таблицы все пароли не хранят все равно.. тем более если соль есть...
Не всё. Не получили доступ к запрограммированным функциям личного кабинета --- Добавлено --- Ну вот чтоб не писать самому соль и прочее, придумали заранее надёжную функцию, которая всё делает.
Кривожопая работа с паролями - это натуральный бич php-сообщества. Из-за низкого порога вхождения, и из-за непонимания таких простых вещей, каждый второй новоиспеченный сайтодел клепает запросы с SQL-инъекциями и хранит пароли, в лучшем случае, в виде md5(md5(md5, без соли, без нифига. В худшем - в чистом виде. Но SQL-инъекции это твоя головная боль. А вот то, что через них могут слить пароли пользователей - головная боль пользователей. По этому разрабы пыха и написали более высокоуровневое решение этой проблемы. Чтобы те, кто и раньше не врубались в правила хранения паролей, перестали вредить пользователям и начали правильно работать с паролями, даже если все равно продолжают нихрена не понимать. Ты почитай про password_hash. Самая главная особенность - удобство. Отдал пароль, получил строку, в которой и алгоритм и соль и хэш. Сохранил строку. Точка. Это же прекрасно.
Я не понимаю, захешировал пароль 123 и получился $2y$10$/tPh.Ua62nH5B4AYKQBFMubmPfNCsCUaxJIi6gK33G8FTR0a7ys0G потом хочу сравнить и почему не совпадает? PHP: $hash = '$2y$10$/tPh.Ua62nH5B4AYKQBFMubmPfNCsCUaxJIi6gK33G8FTR0a7ys0G'; if (password_verify('123', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } --- Добавлено --- вообще никакие пароли не работают, нафиг такая функция нужна
Как я могу криво скопировать? Уже 3 раза создавал новый пароль, ни один не работает --- Добавлено --- Вот запись в базу PHP: $pass = password_hash($passwod, PASSWORD_DEFAULT); $newUserPrepare->bindValue(':password', trim($pass), PDO::PARAM_STR); Потом скопировал этот пароль и он не работает PHP: $hash = '$2y$10$1ax77MTH8YelkfPvda4il..sb8oOXHJiQMr4MV9Mp2GI5G3UPBtDS'; if (password_verify('123', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }
Кратко про "всеравно есть соль": На определенном этапе работы приходит понимание того что ваш сервис не единственный (в это не сразу верится, но это так) из всех что пользователь использует в интернетах, а слитые у вас пароли с данными пользователей отразятся печально не только на вашем проекте и кармане. Обычно это понимают на этапе вырывания волос на голове и увольнений, рекомендую начать пораньше)
Я разобрался, оказывается я в переменной password, пропустил букву r, но если я её пропустил, то у меня же переменной passwod не существует, а почему-то она хешируется в базу
А у тебя отображение ошибок включено на полную? Ну и на всякий загляни в логи сервера, там наверняка нотисов насыпало или ворнингов.
Вот так у меня PHP: error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT); ini_set('display_errors', 1);
Как раз таки расшифровать. Причем без особых проблем. Я пользуюсь этим: PHP: $hashPass = hash('sha256', implode(":", $array)); В массиве пароль+соль+пароль
Господа-товарищи, не путайте тёплое с мягким. И пользуйтесь поиском, не ленитесь. https://php.ru/forum/threads/xeshir...e-i-bezopasnee-ehto-sdelat.46728/#post-371681