#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, который индексирует большинство этих сайтов (и многие другие тоже).