Хэш 256 с uniqid mt_rand

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

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

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

При создании нового члена это устанавливается и добавляется в базу данных в строке под названием «соль».

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

$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'], потому что я хочу, чтобы соль была уникальной.


person skolind    schedule 21.06.2011    source источник
comment
Этот вопрос касается mysql, а не hash и sha256, теги должны быть изменены   -  person Tofandel    schedule 03.07.2020


Ответы (2)


В отличие от моего ответа на другой вопрос, я бы получил здесь всю строку пользователя и сравнил хэши в 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
}
person KingCrunch    schedule 21.06.2011
comment
Еще раз спасибо :о) Это работает. Можно ли как-то проверить, все ли работает как надо? Так как, когда я только что удалил и password='$password', он вошел в систему просто отлично. - person skolind; 22.06.2011
comment
@Oli конечно .. но раньше все работало нормально и без добавления if (hash('sha256', $row['salt'] . $_POST['password']) === $row['password']) но что угодно.. Это работает. я рад .. :о) спасибо, ребята. - person skolind; 22.06.2011

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

person Oliver Charlesworth    schedule 21.06.2011
comment
РЕДАКТИРОВАТЬ: И больше ничего не менять. Похоже, это работает, просто удалив and password='$password' - person skolind; 22.06.2011
comment
@Kolind: Затем вам нужно будет выполнить сравнение соли / пароля в PHP после того, как строка результата будет возвращена. - person Oliver Charlesworth; 22.06.2011