错误是用户名或密码不正确,即使我输入了正确的凭据
The error is incorrect username or password even I've entered the correct credentials
我已经创建了自己的 login.php 使用散列和盐的方式。当我输入新的管理员帐户和密码时,我的 phpmyadmin 似乎工作正常,但是当我在登录中调用哈希和盐时,"User doesn't exist" 似乎很好。错误总是 "Incorrect username & password" 即使我输入了正确的凭据。我已经在我以前的登录系统中使用过这个脚本,但我不知道为什么它现在可以工作了。
这是我的 login.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 = hash('sha256', $password);
不等于
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
因此;您需要修改加密密码的方式或修改您的身份验证方式
在创建页面中生成哈希(哈希(密码).salt)但登录页面生成哈希(salt.password)。
在您的 create_admin 操作中,您创建了散列密码
您的代码是
$password = hash('sha256', $hash.$salt);
/*and*/
$hash is $hash = hash('sha256', $password);
这意味着在 create_page 你的哈希是 hash( hash(password), salt)
但是你的 login.php
您的代码是
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
这意味着在登录时你的哈希是 hash( salt, hash(password) )
简而言之,您在 create_admin 和登录之间的哈希顺序是错误的。
是的,我已经弄清楚了...谢谢!序列应基于 create_acc.php
$password = hash('sha256', $salt.$hash);
Login.php
$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-* 算法太快,因此很容易被暴力破解。
我已经创建了自己的 login.php 使用散列和盐的方式。当我输入新的管理员帐户和密码时,我的 phpmyadmin 似乎工作正常,但是当我在登录中调用哈希和盐时,"User doesn't exist" 似乎很好。错误总是 "Incorrect username & password" 即使我输入了正确的凭据。我已经在我以前的登录系统中使用过这个脚本,但我不知道为什么它现在可以工作了。
这是我的 login.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 = hash('sha256', $password);
不等于
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
因此;您需要修改加密密码的方式或修改您的身份验证方式
在创建页面中生成哈希(哈希(密码).salt)但登录页面生成哈希(salt.password)。
在您的 create_admin 操作中,您创建了散列密码
您的代码是
$password = hash('sha256', $hash.$salt);
/*and*/
$hash is $hash = hash('sha256', $password);
这意味着在 create_page 你的哈希是 hash( hash(password), salt)
但是你的 login.php
您的代码是
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
这意味着在登录时你的哈希是 hash( salt, hash(password) )
简而言之,您在 create_admin 和登录之间的哈希顺序是错误的。
是的,我已经弄清楚了...谢谢!序列应基于 create_acc.php
$password = hash('sha256', $salt.$hash);
Login.php
$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-* 算法太快,因此很容易被暴力破解。