Лучшая практика для хранения имен пользователей и паролей в базах данных MySQL [дубликат]
Возможные Дубликаты:
Безопасный хэш и соль для паролей PHP
Я делаю систему, которая хранит учетные данные пользователя (электронная почта, имя пользователя и пароль) в базе данных MySQL и видела противоречивые представления об использовании шифрования, соления и типов шифрования.
какие методы вы бы порекомендовали? Кодирование в MD5 или SHA1? Солить или не солить? Шифрование только пароля или всех 3 стихии?
5 ответов
для хэша пароля используйте PBKDF2 с это NIST одобрил. Вы должны использовать случайную несекретную соль для каждого пароля и нетривиального (более 1000) количества итераций.
имя пользователя и адрес электронной почты, вероятно, не стоит шифровать.
лучшие практики ИМО:
используйте алгоритм хэширования, такой как SHA256 или SHA512. MD5 теперь небезопасен, так как вы можете отменить хэш/выполнить атаку радуги.
используйте сильную соль, чтобы злоумышленник не мог угадать обычно хэшированные пароли, если они когда-либо получили вход в вашу базу данных.
Не используйте шифрование.
только хэш пароли, имена пользователей и электронные письма в порядке как обычный текст.
это только действительно пароль, который вам нужно зашифровать. Реально, вы должны быть оба Hashing
(Это то, что вы имеете в виду, когда говорите кодирование) в алгоритме at меньше SHA-256 действительно (я уверен, что MD5 и SHA1 взломать?) и Salting
ваши пароли для большей безопасности.
вот ответ на предпочтительный метод их хранения:предпочтительный способ хранения паролей в базе данных
логины и электронные письма не должны быть зашифрованы, вам нужно, чтобы они были в текстовом виде, они будут более полезен.
что касается паролей: они должны абсолютно быть зашифрованным или хэшированным, желательно с солью тоже. До сих пор я использовал несколько интересный метод для этого: AES, ключом для которого является сам пароль. Поэтому, если пользователь делает свой пароль "blabla123", то я бы сохранил его в MySQL, позвонив AES_ENCRYPT('blabla123', 'blabla123')
. Есть 2 преимущества для это:
- вы не храните ключ шифрования в любом месте
- каждый пароль шифруется с помощью другого ключа. Поэтому, даже если вы выясните ключ, у него будет предел его полезности.
действительность затем выполняется путем шифрования того, что пользователь вводит, и сравнения 2 значений.
пароль должен быть защищен хешированием с сильной солью (либо MD5, либо SHA1 в порядке), чтобы предотвратить атаку с помощью радужных таблиц.
вы не должны хэшировать адрес электронной почты - как только вы хэшируете его, вы не можете использовать его ни для чего, кроме проверки того, что вводит пользователь, поэтому его хэширование предотвратит отправку по электронной почте этого человека. В равной степени имя пользователя лучше всего хранить в обычном тексте, чтобы вы могли идентифицировать этого человека.