SHA512 Неверный логин Получение пароля из базы данных

0

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

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

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

     $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'] == hash ('SHA512', $ upass))

(Я читал это)

  • 1
    Почему вы удаляете косые черты и экранируете пароли, когда имеете дело с хэшем паролей? Если у пользователя несколько слешей в пароле, вы его просто ослабили. Я также рекомендовал бы использовать password_hash() и password_verify() вместо хеширования вручную (без соли)
  • 1
    я рекомендую вам использовать password_hash и Password_verify
Показать ещё 1 комментарий
Теги:
sha512

1 ответ

0

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

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

BTW: возможно, переход от mysqli к PDO, но это сложное, как новичок

С наилучшими пожеланиями

  • 0
    Я до сих пор не понимаю. Я полностью потерян. Я попытался с помощью пароля подтвердить в моем текущем коде, но он не работает
  • 0
    Проверьте это руководство: wdb24.com/how-to-use-php-password_hash-registration-login-form . Посмотрите на файл login.php. Не запрашивайте базу данных для имени пользователя и пароля, просто для имени пользователя, а затем используйте функцию password_verify ().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню