Я подключаюсь к базе данных MySQL с PHP и Framework CodeIgniter. Я хочу хранить мои пароли, зашифрованные в базе данных, и хотел бы знать, как это сделать.
Как я могу шифровать данные паролей в базе данных с помощью PHP?
Ответ 1
Из обзора высокого уровня - не шифруйте хэш. И если вы можете, используйте BCrypt. Вот длинная статья, объясняющая почему BCrypt и почему хеширование.
Ответ 2
Шифрование паролей - плохая идея. Если кто-то получит вашу базу данных, они, вероятно, собираются получить ключ, который вы использовали для шифрования паролей.
Реальное решение - это хэш, соль, а затем сохранение паролей. У Джеффа Этвуда есть потрясающая статья: http://www.codinghorror.com/blog/archives/000953.html
И здесь обсуждается "радужные таблицы", массивные таблицы слов с суммой MD5: http://www.codinghorror.com/blog/archives/000949.html
Ответ 3
Лучший способ, в том, что он является простым и безопасным, заключается в использовании phpass. Если ваша установка PHP делает Blowfish, она использует bcrypt; если это не так, он использует несколько проходов md5. В любом случае, он более безопасен, чем прямой md5 или sha1.
$hasher = new PasswordHash(8, false);
// Before storing a password
$hash = $hasher->HashPassword($password);
// To check a password against a hash
if ($hasher->CheckPassword($password, $hash))
// $password and $hash match
Ответ 4
Я всегда использую md5sum пароли, прежде чем я помещаю их в базу данных, а затем также пытается войти в md5sum пароль, чтобы проверить их на db. Просто для безопасности я делаю запрос выбора, используя предложение where с идентификатором пользователя (username) и md5summed, поэтому я не получаю никаких строк вообще, если оба они совпадают.
Кроме того, mysql interanlly использует md5summing на этом пароле, если вам нужен уровень доверия к этому методу обфускации пароля.
Ответ 5
Использовать функцию хэширования; MD5 все будет в порядке. Не храните пароль, сохраняйте хэш. Затем, чтобы регистрировать пользователей, хешировать введенный пароль и сравнивать его с хешем в базе данных; если хеши совпадают, они являются законными.
Кроме того, добавьте соль к паролю, прежде чем вы это сделаете. Это может быть просто, просто добавив строку в пароль, например, ваше доменное имя или некоторые другие данные, которые уникальны для вашего приложения. Это не позволяет хакерам использовать таблицы радуги против ваших хешей.
Ответ 6
Никогда не храните пароли. Используйте односторонний хэш и сохраните его.
Ответ 7
Это также может быть полезно: В чем разница между SHA и MD5 (в PHP)?
Ответ 8
hmm, я хэш, более одного раза, основываясь на любых математических источниках, которые нужно учитывать при написании хранения и проверки паролей
Отныне я, вероятно, подойду с OpenID как можно больше, где бы у меня не было фактического выбора, поэтому мне вообще не нужно хранить пароли. Таким образом, я могу оставить пароли до экспертов, а пользователи уже доверяют.
Ответ 9
Я согласен с хешированием и солением. Я не согласен с выбором хэша на сайте. Используйте разные соли для каждого пользователя, чтобы предотвратить одновременную атаку словаря со всеми вашими паролями.