SHA512 Неверный логин Получение пароля из базы данных - PullRequest
0 голосов
/ 28 мая 2018

ОК. Итак, у меня есть 2 сценария.Один для регистрации пользователей и один для кого-то, чтобы войти.Я новичок в PHP и был здесь раньше, и мне сказали, что я не должен использовать MD5.Итак, вот моя попытка сделать все правильно и попрактиковаться в правильных привычках кодирования с самого начала.

До сих пор я могу получить хэшированный пароль и войти в базу данных, но когда я пытаюсь войти, он говорит мне, что он недействителенпароль.Вот код, который у меня есть.(ПОЖАЛУЙСТА, ПОМНИТЕ, что Я НОВЫЙ, И ДЕЙСТВИТЕЛЬНО У меня ТРУДНОЕ ВРЕМЯ ПОНИМАНИЯ ЭТОГО).

Это логин (я включил только основную часть логина, где у меня возникли проблемы.)

     $username = mysqli_real_escape_string($con,$username);
     $password = stripslashes($_REQUEST['password']);
     $password = mysqli_real_escape_string($con,$password);
     $password = hash('sha512',$password);
     //Checking is user existing in the database or not
     $query = "SELECT * FROM `users` WHERE username='$username'
     AND password='".$password."'";
     $result = mysqli_query($con,$query) or die(mysql_error());
     $rows = mysqli_num_rows($result);
     $row = mysqli_fetch_array($result);
     if($rows==1){

Это регистрация (я включил только основную часть этого)

//Strip & Escape PW
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
$sql_u = "SELECT username FROM users WHERE username='$username'";
$sql_e = "SELECT email FROM users WHERE email='$email'";
$res_u = mysqli_query($con, $sql_u);
$res_e = mysqli_query($con, $sql_e);
if (mysqli_num_rows($res_u) > 0) {
$name_error = "Sorry... username already taken";
}
else if(mysqli_num_rows($res_e) > 0){
$email_error = "Sorry... email already taken";
}
else{
$query = "INSERT INTO users (username, email, password)
VALUES ('$username', '$email', '".hash('sha512',$password)."')";
$results = mysqli_query($con, $query);
echo 'You Have Registered Successfully!<br>

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

Проверьте пароль SHA512, если ($ row ['password'] == хэш ('SHA512', $ upass))

(я читал это)

1 Ответ

0 голосов
/ 28 мая 2018

Вы не должны использовать обычное хеширование SHA512 для паролей.Это уязвимо для радужных таблиц, так как не содержит соли.Так же пароль, тот же хеш.Больше на: https://en.wikipedia.org/wiki/Salt_(cryptography)

В любом случае, в PHP есть собственная функция для хеширования паролей.Используйте password_hash () для регистрации и password_verify () для входа в систему.В этой реализации используется алгоритм Blowfish.

Кстати: возможно, изменится с mysqli на PDO , но это сложно, как для новичка

С уважением

...