ОК Итак, у меня есть 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))
(Я читал это)
Вы не должны использовать простой хэширование SHA512 для паролей. Это уязвимо для радужных столов, так как оно не включает соль. Так же пароль такой же. Дополнительная информация: https://en.wikipedia.org/wiki/Salt_(cryptography)
В любом случае, в PHP есть собственная функция для хеширования паролей. Используйте password_hash() для регистрации и password_verify() для входа. В этой реализации используется алгоритм Blowfish.
BTW: возможно, переход от mysqli к PDO, но это сложное, как новичок
С наилучшими пожеланиями
password_hash()
иpassword_verify()
вместо хеширования вручную (без соли)