PHP 5.5 password_ * функции повторного хеширования

Я установил мое хэширование пароля с помощью функций PHP password_*

1) password_hash($password, PASSWORD_BCRYPT, array("cost" => 11);

2) return password_verify($password, $hashedPassword)? true : false; return password_verify($password, $hashedPassword)? true : false;

Все работает нормально.

Я также нашел функцию password_needs_rehash (), которая имеет 2 параметра, $ hashedPassword и алгоритм, например:

password_needs_rehash ($ hashedPassword, PASSWORD_BCRYPT);

Я понимаю использовать это, когда он изменяет алгоритм или стоимость, что-то вроде:

  if (!password_verify($password, $hashedPassword)) { return false; } if (password_needs_rehash($hashedPassword, PASSWORD_BCRYPT)) { $hashedPassword = password_hash($password, PASSWORD_BCRYPT); // update user password in database with $hashedPassword } return true; 

Все ясно, я просто сомневаюсь.

Я пытаюсь изменить стоимость, не вызывая функцию password_needs_rehash (), и я могу войти в систему.

Я также пытаюсь изменить свою функцию, которая генерирует хэш, я меняю алгоритм с PASSWORD_BCRYPT на PASSWORD_DEFAULT.

Я всегда могу войти.

Может кто-нибудь объяснить, как это работает?

Если мы не изменим алгоритм, когда алгоритм изменится, как PHP password_ * справится с этим?

PS Маленький вопрос в вопросе … Использование php function_ * ли raccomanded использовать «соль» для пароля или нет?

Благодаря!!

    Используемый алгоритм и его стоимость встроены в хэш-код пароля. Это первая пара писем:

     $2y$10$abcdefg...123456789... | | | | | | | +- the password hash | | +- the salt | +- the cost parameter +- the algorithm type 

    (См. Также https://stackoverflow.com/a/16736254/476 )

    Таким образом, при проверке пароля password_verify знает, какой алгоритм использовать.

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

    Типичное использование заключается в том, что со временем вы увеличите коэффициент затрат, поскольку аппаратное обеспечение ускорится и может обрабатывать хэширование с большими затратами. Это не приведет к неожиданному аннулированию старых паролей, которые все еще будут подтверждены с использованием старых настроек, встроенных в хэш. Однако, поскольку на момент проверки у вас есть пароль открытого текста, вы должны использовать эту возможность для обновления хэша с более новыми настройками.