Хеш 256 с уникальным mt_rand - PullRequest
0 голосов
/ 22 июня 2011

У меня есть эта система входа, где я только что (наконец-то) добавил хэш 256.Ранее сегодня у меня была очень длинная нить с @KingCrunch и некоторыми другими, которые мне очень помогли.Еще раз большое спасибо.

Но сейчас я не хочу делать то, что я хочу, чтобы $ salt был уникальным, используя:

$salt = uniqid(mt_rand());  $salt = uniqid(mt_rand());  
                            $password = hash('sha256', $salt.$_POST['password']);

При создании нового участника это устанавливается, идобавлен в базу данных под строкой с именем "salt".

Теперь, когда я пытаюсь войти в систему, с созданными учетными данными он не пускает.

$salt = $row['salt'];
$password = hash('sha256', $salt.$_POST['password']);
$username = mysql_real_escape_string($_POST['username']);
$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

Это мой login_ac.php, где я получил $salt, чтобы быть row['salt'].Я не думаю, что это когда-либо будет успешным, потому что я не сказал, какую колонку в строке соли он должен выбрать.

Итак, мой вопрос: как мне заставить это работать?Нужно ли создавать еще один запрос или что-то подобное?

Мне нужно $salt, чтобы выбрать из row['salt'], потому что я хочу, чтобы соль была уникальной.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

В отличие от моего ответа на другой вопрос, я извлеку здесь всю строку пользователя и сравнил бы хэши в php (помните: я предложил сравнить его в запросе sql в другом вопросе).

$username = mysql_real_escape_string($_POST['username']);
$sql= "SELECT * FROM members WHERE username='$username'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

Это вернет строку пользователя.Если имя пользователя не существует в вашей базе данных, mysql_num_rows($result) вернет 0 (как обычно).Однако затем вы можете воссоздать хеш и сравнить его с хешем, сохраненным в базе данных

if (hash('sha256', $row['salt'] . $_POST['password']) === $row['password']) {
  // fine
}
0 голосов
/ 22 июня 2011

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

...