Как я могу шифровать данные паролей в базе данных с помощью PHP?

Я подключаюсь к базе данных MySQL с PHP и Framework CodeIgniter. Я хочу хранить мои пароли, зашифрованные в базе данных, и хотел бы знать, как это сделать.

Ответ 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

Никогда не храните пароли. Используйте односторонний хэш и сохраните его.

Ответ 8

hmm, я хэш, более одного раза, основываясь на любых математических источниках, которые нужно учитывать при написании хранения и проверки паролей

Отныне я, вероятно, подойду с OpenID как можно больше, где бы у меня не было фактического выбора, поэтому мне вообще не нужно хранить пароли. Таким образом, я могу оставить пароли до экспертов, а пользователи уже доверяют.

Ответ 9

Я согласен с хешированием и солением. Я не согласен с выбором хэша на сайте. Используйте разные соли для каждого пользователя, чтобы предотвратить одновременную атаку словаря со всеми вашими паролями.