Как мне сгенерировать одно и то же значение строки пароля зашифрованной базы данных с помощью crypt () и моей соли?

Если crypt() генерирует разные строки каждый раз, как, черт возьми, я должен объединить предоставленный пароль и соль для одного и того же зашифрованного пароля в базе данных?

Я думал, что мог бы генерировать случайную соль для метода crypt (), чтобы объединить с предоставленным пользователем вводом (то есть crypt(@_POST['password'],$salt)) для шифрования пароля. Это генерирует зашифрованный пароль для моей базы данных. Я также храню это $salt в моей базе данных в пределах salt колонка.

Я думал, что могу позвонить crypt($_POST['providedPassword'],$saltStoredInDatabaseFromRegistrationTime) вернуть то же зашифрованное значение для пароля, который я сохранил в базе данных из формы регистрации, но оказывается, что crypt() возвращает другое значение каждый раз, когда я его называю.

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

0

Решение

Путь crypt() работает так:

// to create
$hash = crypt($password, $salt);

// to verify
if (crypt($password, $hash) == $hash) {
// yay!
}

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

Замечания: Важно всегда генерировать новую соль каждый раз, когда вы что-то хэшируете crypt(),

Тем не менее, начиная с PHP 5.5 вы должны хешировать пароли, используя password_hash() а также password_verify(); для более ранних версий вы можете использовать password_compat библиотека.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]