我正在创建一个用户可以登录的站点。当他们注册一个帐户时,我将哈希密码保存在数据库中。我正在尝试使用password_verify()来确认密码是否匹配,但是它返回false。
为确认它们是否匹配,我将打印出用户键入内容的哈希版本和存储在数据库中的哈希密码。 我知道一个常见的问题是数据库密码字段对于散列密码而言太小,但是我尝试将其设置为VARCHAR(256)和TEXT,以确保存储了整个散列密码。
if(isset($_POST['email'])){
$email = strip_tags(mysqli_real_escape_string($conn, $_POST['email']));
$password = strip_tags(mysqli_real_escape_string($conn, $_POST['passwd']));
$sql = "SELECT email, passwd AS hashed_password FROM Accounts WHERE email = '$email'";
$result = $conn->query($sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
//print the hashed password that is stored in the database
echo 'stored in the database: '. $row['hashed_password']. '<br>';
$hash = hash('sha512', $password);
//print the hashed version of what the user typed in
echo 'hashed version of what your submitted: '. $hash. '<br>';
if( password_verify($password, $hash)){
echo "true";
}
else{
echo 'false';
}
我希望password_verify()返回true,但返回false
这是我当前输出的内容:
存储在数据库中: 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75
您提交的内容的散列版本: 1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75
false
答案 0 :(得分:0)
password_verify()与password_hash()函数一起使用;
更改:
$hash = hash('sha512', $password);
收件人:
$hash = password_hash($password, PASSWORD_DEFAULT);