За последние 24 часа нас посетили 17654 программиста и 1656 роботов. Сейчас ищет 961 программист ...

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

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

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Не понимаю, если password_hash необратимый алгоритм хеширования, то как пароль сравнивается с помощью password_verify?
    --- Добавлено ---
    Обратите внимание, что password_hash() возвращает алгоритм, стоимость и соль как части хеша. Таким образом, вся необходимая для проверки информация включена в него.

    Какая информация?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Пользователь отправляет пароль. Ты его хешируешь и сравниваешь с хешем в бд
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou получается в хеше содержаться какие-то метки?
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Нет. У тебя есть логин пароль. Пароль ты хешируеш при регистрации. А при авторизации пользователь отправляет тебе оригинальный пароль ты его снова хешируеш ищешь по логину предыдущий хеш и сравниваешь
    --- Добавлено ---
    Вот ты представь что у тебя есть файл на 10гб. Ты получаешь с него хеш на несколько символов. Ты же не можешь с несколько символов снова сделать файл на 10гб?
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou пароль повторно не хешируется, ты не понял вопроса.
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    В хэше, который выдает password_hash, в открытом виде записана соль и сложность.
    Соль всегда разная.
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @[vs] так это понятно
     
  8. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Dimon2x а что не понятно?
     
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну как это не хешируется? С чего ты взял?
    Может ты просто запутался что такое хеш что такое шифр и что такое кеш?
    Вот у дурова шифр. Он обратимый но для этого нужен ключ. Правительство хочет обязать его скопировать все ключи с пользовательских программ и хранить их на сервере. Но так как не все айтишники получается такой вот цирк. Хотя скорее всего в правительстве клоуны которые даже не знают чего требовать
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou если один и тот же пароль захешировать 2 раза, то хеши будут разными.
     
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Нет. Не два раза. При регистрации ты берешь пароль password получаешь с него jhsjdfhsdmfbssdfsdfjksdfs. При авторизации пользователь снова пишет password ты берешь этот password и получаешь с него jhsjdfhsdmfbssdfsdfjksdfs а дальше сравниваешь то что получилось с тем что в бд
    --- Добавлено ---
    Хеш с password по одному алгоритму всегда будет тот же
     
  12. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Потому, что соль разная. Но когда ты передаешь в проверяющую функцию старый хэш и введенный пароль, она берет параметры хэширования старые, поэтому получает тот же хэш.
     
  13. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou разные!

    PHP:
    1. echo password_hash('dimon', PASSWORD_BCRYPT) . '<br>';
    2. echo password_hash('dimon', PASSWORD_BCRYPT) . '<br>';
     
  14. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Тогда это не хэш а генерация рандомных значений.
    Хэш с одного объекта всегда один и тот же
    --- Добавлено ---
    Возможно там хеш+время+шифрование.
     
  15. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Dimon2x, написано же-ж: "Если не задано, то будет использована стандартная стоимость и соль будет генерироваться автоматически."
    Всё просто. При регистрации - password_hash. При аутентификации - bool password_verify ( string $password , string $hash). Обратите внимание на второй параметр - этот тот самый hash, что был (например) записан в базу при регистрации.
     
    [vs] нравится это.