Я создал свой собственный способ login.php, используя хэш & поваренная соль. Когда я ввожу новую учетную запись администратора, пароль и, кажется, работает нормально на моем phpmyadmin, но когда я вызываю хэш и соль в моем логине, «Пользователь не существует» кажется хорошим. Ошибка всегда «Неверное имя пользователя & пароль «, даже если я ввел правильные данные. Я уже использовал этот скрипт в моей предыдущей системе входа в систему, но я не знаю, почему он сейчас работает.
Вот мой логин.php
<?php
include_once('config.php');
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$username = mysqli_real_escape_string($mysqli,$username);
$query = $mysqli->query("SELECT password,salt FROM admin WHERE username='$username'");
$numrows = mysqli_num_rows($query);
if($username == "" && $password =="") {
echo '<center>';
echo '<h3>Please Fill in the blank form</h3>';
echo '<button type="button" class="btn btn-primary" id="goback" >Log In Again</button>';
echo '</center>';
} else if($numrows!=0) {
$userData = mysqli_fetch_array($query, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
if($hash != $userData['password']) {
echo '<center>';
echo '<h3>Incorrent username or password</h3>';
echo '<button type="button" class="btn btn-primary" id="goback" >Log In Again</button>';
echo '</center>';
} else {
header('Location: firstpagesurvey.html');
}
} else {
die('
<center>
<h3>Username does\'t exists</h3>
<button type="button" class="btn btn-primary" id="goback" >Log In Again</button>
</center>
');
}
?>
Вот действие create_admin
<?php
include_once('config.php');
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$hash = hash('sha256', $password);
function createSalt(){
$text = md5(uniqid(rand(), true));
return substr($text,0,3);
}
$salt = createSalt();
$password = hash('sha256', $hash.$salt);
$username = $mysqli->real_escape_string($username);
$query = $mysqli->query("INSERT INTO `admin`(`username`,`password`,`firstname`,`lastname`,`salt`) VALUES('$username','$password','$firstname','$lastname','$salt')");
$mysqli->close();
header('Location: success.php');
?>
на странице создания создайте хеш (hash (пароль) .salt), но на странице входа создайте хеш (salt.password).
в вашем действии create_admin вы делаете хешированный пароль
ваш код
$password = hash('sha256', $hash.$salt);
/*and*/
$hash is $hash = hash('sha256', $password);
это означает, что в create_page ваше хэширование — это хеш (хеш (пароль), соль)
но ваш логин.php
ваш код
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
это означает, что при входе в систему вы хэшируете хеш (соль, хеш (пароль))
короче говоря, ваш порядок хеширования между create_admin и login неверен.
Я думаю, что проблема заключается в том, когда вы создаете свой пароль.
$hash = hash('sha256', $password);
НЕ РАВНЫ
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
Следовательно; Вам нужно изменить способ шифрования пароля или изменить способ аутентификации.
Было бы намного проще и безопаснее, если бы вы использовали встроенную функцию пароля password_hash (). Поскольку соль включена в результирующее хеш-значение, вы также можете обойтись без отдельного поля базы данных для соли.
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
Это не только создаст криптографически безопасную соль, но также будет использовать хеш-функцию с коэффициентом стоимости (BCrypt). Двойное хеширование часто предлагается из коробки средствами взлома паролей. Алгоритм SHA- * является слишком быстрым и поэтому может быть слишком легко перебран.
Да, я понял это … Спасибо! Последовательность должна быть основана на create_acc.php
$password = hash('sha256', $salt.$hash);
login.php
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));