Я подключаюсь к базе данных MySQL с PHP и Framework CodeIgniter. Я хочу хранить свои пароли, зашифрованные в базе данных, и хотел бы знать, как это сделать.
Из обзора высокого уровня – не шифруйте хэш. И если вы можете, используйте BCrypt. Вот длинная статья, объясняющая, почему BCrypt и почему хеширование.
Шифрование паролей – плохая идея. Если кто-то получит вашу базу данных, они, вероятно, собираются получить ключ, который вы использовали для шифрования паролей.
Реальное решение – хеш, соль, а затем сохранение паролей. У Джеффа Этвуда есть потрясающая статья: http://www.codinghorror.com/blog/archives/000953.html
И здесь обсуждается «радужные таблицы», массивные таблицы слов со своими суммами MD5: http://www.codinghorror.com/blog/archives/000949.html
Лучший способ, в том, что он является простым и безопасным, – использовать 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
Я всегда использую пароли md5sum, прежде чем я поместил их в базу данных, а затем также попытаюсь проверить пароль md5sum для проверки на db. Просто для безопасности я делаю запрос выбора, используя предложение where с идентификатором пользователя (username) и md5summed, чтобы я не возвращал никаких строк вообще, если они не совпадают.
Кроме того, mysql interanlly использует md5summing на своих паролях, если вам нужен уровень доверия к этому методу обфускации пароля.
Используйте функцию хэширования; MD5 все будет в порядке. Не храните пароль, сохраняйте хэш. Затем, чтобы регистрировать пользователей, хешировать введенный пароль и сравнивать его с хешем в базе данных; если хэши совпадают, они являются законными.
Кроме того, добавьте соль к паролю, прежде чем вы это сделаете. Это может быть просто, просто добавив строку в пароль, например, ваше доменное имя или некоторые другие данные, уникальные для вашего приложения. Это не позволяет хакерам использовать радужные столы против ваших хешей.
Никогда не храните пароли. Используйте односторонний хеш и сохраните это.
Это также может быть полезно: Какая разница между SHA и MD5 (в PHP)?
хм, я хэш, более одного раза, основываясь на любых математических источниках, которые нужно учитывать при написании хранения и проверки паролей
Отсюда я, вероятно, подойду с OpenID как можно больше, где бы у меня не было фактического выбора, поэтому мне вообще не нужно хранить пароли. Таким образом, я могу оставить пароли до экспертов, а пользователи уже доверяют.
Я согласен с хешированием и солением. Я не согласен с выбором хэша на сайте. Используйте разные соли для каждого пользователя, чтобы одновременно предотвратить атаки словаря на все ваши пароли.