Главная > Технологии > Алгоритмы > MD5 Хранение паролей в базе данных. md5() + сольВ этой статье я расскажу как безопасно хранить пароли в базе данных 1 способ. Храним пароль как есть. Например, если ввели пароль "fuckoff", то он так и сохранится. Минус в том, что при взломе БД злоумышленник получает все пароли в явном виде.
2 способ. Храним пароль в зашифрованном виде, используя алгоритмы шифрования md5, sha1 и т.д. Например, md5('loveyou') = "f74a10e1d6b2f32a47b8bcb53dac5345"
При взломе злоумышленник получит зашифрованные пароли и не сможет их расшифровать, т.к шифрование необратимое. Но он может методом перебора шифровать различные комбинации символов и, сравнивая полученный хеш с украденным хешом пароля, найти исходный пароль. На первый взгляд кажется невозможным перебрать огромное количество комбинаций. Однако у большинства пользователей пароль представлен цифрами, словарными словами и другими простыми комбинациями символов. Поэтому задача упрощается (особенно, если пароль представлен цифрами). Кроме того, существуют сервисы, которые хранят терабайты хешей паролей (Rainbow tables). Например, сервис http://gdataonline.com/, содержит 1 133 000 000 паролей. Взлом пароля "loveyou" занимает сотые доли секунды
3 способ. Храним пароль в зашифрованном виде, но добавляя несколько случайных символов, уникальных для
каждого пользователя (так называемая соль). А еще лучше хранить двойной md5 с солью. Взломать такой вышеупомянутым
способом практически невозможно. В таблице user нам потребуется два поля:
Например, авторизация пользователя // $user - информация о пользователе из таблицы user
if (md5(md5($_POST['password']).$user['salt']) == $user['password']) {
// проверка прошла успешно. логиним!
}
Где брать соль? Необходимо в скрипте регистрации генерировать соль для каждого нового пользователя. Для этого можно воспользоваться следующей функцией function generateSalt() {
$salt = '';
$length = rand(5,10); // длина соли (от 5 до 10 сомволов)
for($i=0; $i<$length; $i++) {
$salt .= chr(rand(33,126)); // символ из ASCII-table
}
return $salt;
}
Различные варианты соления в известных движках:
Главная > Технологии > Алгоритмы > MD5 |