Хэш пароли php - PullRequest
       5

Хэш пароли php

1 голос
/ 25 августа 2010

У меня есть очень простая система входа в систему, которая аутентифицирует пользователей с помощью пользовательской таблицы в базе данных mysql с php.

Может кто-нибудь объяснить, какой смысл хэшировать пароли, как это делать с помощью php и что на самом деле хранится в базе данных.

Спасибо

Ответы [ 4 ]

1 голос
/ 25 августа 2010

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

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

как это сделать с php, и что на самом деле хранится в базе данных.

Чтобы использовать его в PHP, вы просто берете строку, в этом примере $password = 'password'; и используете команду sha1();. Это вернет что-то вроде d0be2dc421be4fcd0172e5afceea3970e2f3d940. Рекомендуется также «солить» пароли с помощью вашего php-скрипта, чтобы для успешного входа в систему требовался скрипт входа в PHP-скрипт. Пример:

<?php
    $salt1 = '2348SDasdf!^*__';
    $salt2 = '_a35j@*#(lsdf_';
    $password = sha1($salt1.$_POST['password'].$salt2); // d0be2dc421be4fcd0172e5afceea3970e2f3d940
?>

Затем вставьте $ password в вашу базу данных. После входа в систему вам понадобится ввести пароль, указанный через sha1, чтобы он совпадал с паролем в базе данных. Вы вставляете его в базу данных, как и любую другую строку, просто убедитесь, что у вас есть достаточная длина столбца, который вы пытаетесь вставить.

1 голос
/ 25 августа 2010

Скажем, кто-то взломал вашу систему (или обнаружил лазейку в ваших sql-запросах), и вы не хотите, чтобы он знал все пароли.

Таким образом, вы хешируете их перед сохранением.Таким образом, вы можете проверить, в порядке ли пароль, но не выводить пароль из хеша.

Если вы не используете слабый хеш.Если вы наберете только sha1($password), вы обнаружите, что добавление в Google хеша часто используемых паролей дает пароль менее чем за 0,1 сек * (но в противном случае вы также можете найти радужные таблицы для всех видов хэшей)

Таким образом, вы хотите добавить «соль», то есть вы генерируете какое-то мусорное значение:

$salt = rand().rand().rand();

, а затем сохраняете

$hash = $salt."-".sha1($salt.$password);

при проверке, вы знаете соль, и выМожно проверить, правильно ли введен пароль, но знание хеша и соли затрудняет восстановление пароля.(если, конечно, у вас нет радужной таблицы с солью)

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

0 голосов
/ 25 августа 2010

Никто еще не сказал, почему, поэтому позвольте мне: большинство пользователей - идиоты и везде используют один и тот же пароль. Вы не хотите, чтобы хакер взломал вашу систему, захватил пароли, затем пошел и взломал ваши учетные записи пользователей повсюду.

0 голосов
/ 25 августа 2010

Хеш - это «односторонняя функция». Вы вводите пароль и получаете примерно уникальный результат, который невозможно (с вычислительной точки зрения) преобразовать обратно в реальный пароль. В зависимости от хеша он будет выглядеть по-разному. Например, с sha1 (http://php.net/manual/en/function.sha1.php) вы всегда получите строку длиной 20 байт.

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

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