Как использовать функции хэширования паролей Тейлора Хорнби
Я читал о хешировании паролей. Я действительно не очень хорош в php. Может кто-нибудь сказать мне, как использовать функции хэширования паролей Тейлор Хорнби, как показано здесь?
3 ответа
Сначала вы должны включить файл PHP, вы можете увидеть, как это сделать здесь. Вам также необходимо настроить файл в соответствии с тем, какую хеш-функцию вы хотите использовать. sha256 будет хорошим выбором.
Вы бы тогда запустить create_hash
с вашим паролем и сохраните возвращенное значение в вашей базе данных.
Чтобы подтвердить пароль, вы должны запустить validate_password
функция с хешем из базы данных и паролем ввода пользователя. Две другие функции, которые вам не нужны, validate_password
а также create_hash
запустите те для вас со всеми необходимыми параметрами.
Криптография сложна и может сбивать с толку, поэтому было бы неплохо немного прочитать о безопасности, прежде чем хранить конфиденциальную информацию, такую как пароли, поскольку неправильная настройка может означать, что ваши пароли хранятся небезопасно. На этой странице представлены некоторые технические подробности о том, как надежно хранить пароли.
Класс, с которым вы связаны, реализует хороший алгоритм (PBKDF2) для хэширования паролей, но есть большая проблема с такими реализациями в PHP.
Соответствующие алгоритмы хеширования для паролей включают в себя фактор стоимости, с помощью которого вы можете контролировать необходимое время для вычисления хеш-значения. Чем выше значение стоимости, тем больше раундов хеширования будет сделано. Поскольку PHP медленнее, чем собственная реализация C, и вы не хотите ждать несколько секунд для входа в систему, вы будете делать меньше циклов хэширования. Это ослабляет хэши паролей, и взломщик, который может использовать графический процессор, будет иметь большое преимущество.
Вот почему PHP предлагает встроенную реализацию password_hash() алгоритма BCrypt:
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
Вместо этого используйте эту функцию, даже если связанная реализация кажется хорошо выполненной.
Увидев этот вопрос и обсудив его с defuse, я представил первый пример его класса хеширования паролей в действии. Больше следовать в зависимости от спроса и свободного времени:
https://github.com/defuse/password-hashing/tree/master/examples