2015-01-24 17 views
-1

На сайте РНР здесь: http://php.net/manual/en/password.constants.php, это следующий сказано:Как изменить метод PHP Hash?

PASSWORD_DEFAULT (integer) Алгоритм, используемый по умолчанию для хэширования, если алгоритм не предусмотрен. Это может измениться в новых версиях PHP, когда поддерживаются более новые, более сильные алгоритмы хэширования.

Стоит отметить, что со временем эта константа может (и, вероятно, будет) изменяться. Поэтому вы должны знать, что длина полученного хэша может измениться. Поэтому, если вы используете PASSWORD_DEFAULT, вы должны сохранить полученный хеш способом, который может хранить более 60 символов (255 - рекомендуемая ширина).

Как это может быть? Если кто-то устанавливает свой пароль, а хэш установлен в базе данных, а затем метод изменяется, они не смогут войти, так как метод будет генерировать другой хеш, не так ли?

+0

ну тогда не используйте PASSWORD_DEFAULT. вы думаете, что им следует продолжать использовать небезопасный алгоритм для обеспечения обратной сопоставимости? –

+2

@Dagon password_verify() ** ** совместим с обратной совместимостью. – Keelan

+0

Просто поиск 'PASSWORD_DEFAULT' уже дает 181 результат. К счастью, вам не нужно их читать. [Второй] (http://stackoverflow.com/questions/28033298/password-hash-password-default-php-5-5) уже является дубликатом вашего вопроса. На вопрос только 5 дней назад. – GolezTrol

ответ

2

Когда вы используете пароль с помощью функции hash_password(), информация об используемом алгоритме и стоимости включена в возвращаемую строку. Поэтому password_verify() всегда может проверить, действительно ли предоставленный пароль действителен с учетом определенного хэша.

Смотрите также документацию для password_hash():

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

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

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