我正在尝试使password_verify与数据库中的crypt密码匹配,但我遇到了问题,似乎它不匹配。
我已经搜索过了,我发现我需要使用最大长度为255的VARCHAR,但仍然无效。
以下是代码:
if( isset($_POST['bG9n']) && "bG9naW4") {
$email = $_POST['email'];
$pass= $_POST['pass'];
if($pass) {
$crypt = password_hash($pass,PASSWORD_BCRYPT);
$decrypt = password_verify($pass,$crypt);
}
if(password_verify($pass,$crypt)) {
echo "Sucess"; // It does echo Sucess
}
if (!empty($email) && !empty($pass) && filter_var($email,FILTER_VALIDATE_EMAIL) && password_verify($pass,$crypt)) {
$sql = "SELECT email, pass FROM clientes WHERE email ='$email' AND pass = '$decrypt' ";
$query = $DB_con->prepare($sql);
$query->execute();
$count = $query->rowCount();
if($count == 1){
$_SESSION['email'] = $email;
$_SESSION['pass'] = $decrypt;
header("Location: home.php");
}
else {
echo "<BR>Error";
}
}
可能是一个简单的修复,但我似乎无法找到错误。
提前感谢大家。
答案 0 :(得分:1)
这是正常行为。使用bcrypt
的哈希不是确定性的,它从启动到启动都不同,因此您无法查询它。
您必须通过mysql
检查是否匹配,而不是php
。
所以,先从数据库中获取,然后$isVerified = password_verify($pass, $hashFromDB);