当我在我的网站上注册用户时,我有这种方法来散列密码。据我所知,它完美地工作,我将 $password_hash 和 $salt 存储在我的数据库中。但是当我尝试对用户进行身份验证以进行登录时会出现问题,我得到的哈希值不匹配。
注册功能
$salt = createSalt();
$password = createPassword();
$hash = hash('sha256', $password);
$password_hash = hash('sha256', $salt . $hash);
登录功能
$query = "SELECT Password_Hash,Salt FROM accounts WHERE Email = ' ".$email." ' ";
$result = mysqli_query($mysqli, $query);
$rows = mysqli_fetch_assoc($result);
$hash = hash('sha256', $password);
$password_hash = hash('sha256', $rows['Salt'] . $hash);
创建密码功能
function createPassword()
{ /*This function is used to create the password for the user */
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
for ($i = 0; $i < 8; $i++)
{
$n = rand(0, strlen($alphabet)-1);
$pass[$i] = $alphabet[$n];
}
return implode($pass);
}
两个密码哈希不匹配。有什么我做错了吗?输出下方的图像。第一行是数据库输出