PHP.net говорит, что md5 () и sha1 () не подходят для пароля?

#php #mysql #hash #passwords #md5

#php #mysql #хэш #пароли #md5

Вопрос:

http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

Я сохраняю пароли пользователей в базе данных MySQL в хэш-форме. Означает ли это, что это небезопасно делать? Если это так, каковы мои альтернативы?

Комментарии:

1. Вам нужно солить хэшировать ваши пароли перед их сохранением. На этом сайте много вопросов, связанных с этим.

2. Как сказал Hippo, это потому, что он несоленый. Если вы используете crypt, он будет использовать один из этих алгоритмов по вашему выбору, но он также изменит пароль.

Ответ №1:

Следующий вопрос в FAQ, на который вы ссылаетесь, обсуждает это: Как я должен хэшировать свои пароли, если обычные хэш-функции не подходят?

Из часто задаваемых вопросов:

Предлагаемый алгоритм для использования при хэшировании паролей — Blowfish, поскольку он значительно дороже в вычислительном отношении, чем MD5 или SHA1, при этом все еще масштабируемый.

Следующий за этим вопрос касается соли.

Ответ №2:

Уже много раз получал ответы. Вы можете использовать что-то вроде SHA-256http://php.net/manual/en/function.hash.php но вы также должны солить пароль перед его хэшированием, и вы можете итеративно хэшировать пароль — так что в маловероятном случае, если он будет взломан, он покажет только другой хэш (другими словами, взлом пароля занимает гораздо больше времени).

Ответ №3:

Как рекомендует страница, на которую вы ссылаетесь, используйте функцию PHP crypt() с алгоритмом Blowfish. Кроме того, используйте различную соль для каждого вызова crypt() . Вы можете сохранить значения salt в той же таблице базы данных, что и пароль, чтобы его можно было использовать при последующем сравнении паролей.

Для вызова crypt() с использованием алгоритма Blowfish используйте соль, которая начинается с $2a$ , за которой следует число («параметр стоимости») между 04 и 31, за которым следует $ , а затем 22 цифры из алфавита ./0-9A-Za-z .

Руководство по PHP: crypt содержит более подробную информацию о том, как использовать crypt()

Ответ №4:

Прочитайте следующий раздел ссылки: Как я должен хэшировать свои пароли, если обычные хэш-функции не подходят?

Ответ №5:

Для конкретного примера того, почему использование простого, несоленого MD5 для хэширования пароля является плохой идеей, попробуйте ввести MD5-хэши некоторых достаточно распространенных паролей на сайт, подобныйmd5decrypter.co.uk или md5hashcracker.appspot.com или md5this.com. Или просто в Google, который индексирует большинство этих сайтов (и многие другие тоже).