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

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

Ответы [ 9 ]

10 голосов
/ 21 октября 2008

Из обзора высокого уровня - не шифруйте, хеш. И если вы можете, используйте BCrypt. Вот длинная статья, объясняющая, почему BCrypt и почему хеширование.

6 голосов
/ 21 октября 2008

Шифрование паролей - плохая идея. Если кто-то получит вашу базу данных, он, вероятно, получит ключ, который вы использовали для шифрования паролей.

Реальное решение - хешировать, солить, а затем хранить пароли. У Джеффа Этвуда есть потрясающий пост об этом: http://www.codinghorror.com/blog/archives/000953.html

А вот один обсуждает "радужные таблицы", массивные таблицы слов с их суммами MD5: http://www.codinghorror.com/blog/archives/000949.html

2 голосов
/ 21 октября 2008

Лучший способ, поскольку он прост и безопасен, это использовать 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
1 голос
/ 21 октября 2008

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

1 голос
/ 21 октября 2008

Использовать функцию хеширования; MD5 будет хорошо. Не храните пароль, храните хэш. Затем, чтобы войти в систему, хэшируйте введенный ими пароль и сравнивайте его с хэшем в базе данных; если хэши совпадают, они допустимы.

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

1 голос
/ 21 октября 2008

Я всегда пароли md5sum, прежде чем помещать их в базу данных, а затем также пароль входа в систему md5sum пытается проверить их по БД. Просто для безопасности я делаю запрос на выборку, используя предложение where с userID (username) И паролем md5, чтобы я не получил никаких строк вообще, если оба не совпадают.

Кроме того, mysql использует md5summing для своих паролей, если вам нужен уровень доверия к этому методу запутывания паролей.

0 голосов
/ 21 октября 2008

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

0 голосов
/ 21 октября 2008

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

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

0 голосов
/ 21 октября 2008

Это также может быть полезно: В чем разница между SHA и MD5 (в PHP)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...