2014-08-18 6 views
0

Хорошо, поэтому я тестирую Cakephp 3.0 alpha2, передавая свое приложение (2.5) на 3.x. Мое текущее приложение настроено таким образом, что при сбросе пароля вы не можете изменить его на любой из предыдущих шести паролей (хранящихся в таблице паролей, которая соединяет его с user_id) для целей безопасности. Когда я смотрю на изменения в Cake 3.0, я заметил, что если вы создадите новый объект, который хэширует пароль по-разному, даже если это тот же пароль. Что было бы хорошим способом сравнить новый пароль со старыми? Хотел бы я использовать хэшер паролей, встроенный в функцию под названием check?Cakephp 3.0 alpha2 Как сравнить новый пароль с старыми паролями?

ответ

5

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

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

Вы можете сделать это с помощью метода password_verify - http://au2.php.net/password_verify

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

Существует хорошее объяснение bcrypt в php здесь: How do you use bcrypt for hashing passwords in PHP? Я бы рекомендовал прочитать это - как только вы поймете, как bcrypt обрабатывает пароли, ваша проблема не должна быть слишком сложной для решения.

Смежные вопросы