За последние 24 часа нас посетили 40025 программистов и 2356 роботов. Сейчас ищут 1196 программистов ...

Хеширование пароля

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 14 июн 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Какую функцию лучше использовать: hash или password_hash()?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Конечно второе
     
    Fell-x27 и san4ez нравится это.
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    hash и password_hash - это не хэш функции, раз на то пошло. Это более высокоуровневый инструмент. Под капотом там одно и то же. Но password_hash сделан, как говорится, "для людей". password_ инструментарий как бы в своем названии уже содержит намек, для чего он нужен.
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а зачем вообще как то сложно хешировать пароли?? кто то может сказать? почему обычной md5 не хватает? зачем все это?
    если получат доступ к БД до тут уже пофиг насколько хеширован пароль.. все равно уже получили.. а так смысл какой?
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Алекс8 это не всегда так. Если был взлом и что-то сломали, то можно прикрыть дыру и восстановиться из бэкапа, и не бояться что пострадают пользователи.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Есть радужные таблицы md5 самых распространённых паролей - это раз, md5 работает слишком быстро, не создавая злоумышленнику тормозов при брутфорсе, это два.
     
  7. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    так md5 все равно не расшифровать... а радужные таблицы все пароли не хранят все равно.. тем более если соль есть...
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не всё. Не получили доступ к запрограммированным функциям личного кабинета
    --- Добавлено ---
    Ну вот чтоб не писать самому соль и прочее, придумали заранее надёжную функцию, которая всё делает.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Кривожопая работа с паролями - это натуральный бич php-сообщества. Из-за низкого порога вхождения, и из-за непонимания таких простых вещей, каждый второй новоиспеченный сайтодел клепает запросы с SQL-инъекциями и хранит пароли, в лучшем случае, в виде md5(md5(md5, без соли, без нифига. В худшем - в чистом виде. Но SQL-инъекции это твоя головная боль. А вот то, что через них могут слить пароли пользователей - головная боль пользователей.

    По этому разрабы пыха и написали более высокоуровневое решение этой проблемы. Чтобы те, кто и раньше не врубались в правила хранения паролей, перестали вредить пользователям и начали правильно работать с паролями, даже если все равно продолжают нихрена не понимать.

    Ты почитай про password_hash. Самая главная особенность - удобство. Отдал пароль, получил строку, в которой и алгоритм и соль и хэш.
    Сохранил строку.
    Точка.

    Это же прекрасно.
     
    AlexProg и Алекс8 нравится это.
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Я не понимаю, захешировал пароль 123 и получился $2y$10$/tPh.Ua62nH5B4AYKQBFMubmPfNCsCUaxJIi6gK33G8FTR0a7ys0G

    потом хочу сравнить и почему не совпадает?

    PHP:
    1. $hash = '$2y$10$/tPh.Ua62nH5B4AYKQBFMubmPfNCsCUaxJIi6gK33G8FTR0a7ys0G';
    2.  
    3.         if (password_verify('123', $hash)) {
    4.             echo 'Password is valid!';
    5.         } else {
    6.             echo 'Invalid password.';
    7.         }
    --- Добавлено ---
    вообще никакие пароли не работают, нафиг такая функция нужна
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Криво копируешь значит. У всех остальных работает
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Dimon2x у тебя что-то пошло не так
     
  13. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Как я могу криво скопировать? Уже 3 раза создавал новый пароль, ни один не работает
    --- Добавлено ---
    Вот запись в базу

    PHP:
    1. $pass = password_hash($passwod, PASSWORD_DEFAULT);
    2. $newUserPrepare->bindValue(':password', trim($pass), PDO::PARAM_STR);
    Потом скопировал этот пароль и он не работает

    PHP:
    1. $hash = '$2y$10$1ax77MTH8YelkfPvda4il..sb8oOXHJiQMr4MV9Mp2GI5G3UPBtDS';
    2.  
    3.         if (password_verify('123', $hash)) {
    4.             echo 'Password is valid!';
    5.         } else {
    6.             echo 'Invalid password.';
    7.         }
     
  14. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Кратко про "всеравно есть соль":
    На определенном этапе работы приходит понимание того что ваш сервис не единственный (в это не сразу верится, но это так) из всех что пользователь использует в интернетах, а слитые у вас пароли с данными пользователей отразятся печально не только на вашем проекте и кармане. Обычно это понимают на этапе вырывания волос на голове и увольнений, рекомендую начать пораньше)
     
    #14 Zuldek, 14 июн 2017
    Последнее редактирование: 14 июн 2017
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Dimon2x может быть у тебя переменная $passwod пустая?
     
    AlexProg и Dimon2x нравится это.
  16. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Я разобрался, оказывается я в переменной password, пропустил букву r, но если я её пропустил, то у меня же переменной passwod не существует, а почему-то она хешируется в базу
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Dimon2x
    Код (Text):
    1. echo md5("");
    =)
     
  18. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Мне интересно, почему password_hash не ругалась на несуществующую переменную?
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Dimon2x а другие функции ругаются?
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А у тебя отображение ошибок включено на полную?
    Ну и на всякий загляни в логи сервера, там наверняка нотисов насыпало или ворнингов.
     
  21. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Вот так у меня
    PHP:
    1. error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
    2. ini_set('display_errors', 1);
     
  22. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Оставь только E_ALL.
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А неопределённая переменная вызывает нотис, которые ты отключил :)
     
    Fell-x27 и Dimon2x нравится это.
  24. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Как раз таки расшифровать. Причем без особых проблем.
    Я пользуюсь этим:
    PHP:
    1. $hashPass = hash('sha256', implode(":", $array));
    В массиве пароль+соль+пароль ;)
     
  25. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3