密码验证 bcrypt,似乎无法匹配数据库
Password verify bcrypt, can't seem to match database
我正在尝试使 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";
}
}
可能很容易修复,但我似乎找不到问题所在。
先谢谢大家了。
这是正常行为。 bcrypt
的哈希值不是确定性的,它因启动而异,因此您无法查询它。
您必须检查它是否匹配,不是通过 mysql
,而是通过 php
。
所以,先从数据库中获取,然后$isVerified = password_verify($pass, $hashFromDB);
我正在尝试使 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";
}
}
可能很容易修复,但我似乎找不到问题所在。
先谢谢大家了。
这是正常行为。 bcrypt
的哈希值不是确定性的,它因启动而异,因此您无法查询它。
您必须检查它是否匹配,不是通过 mysql
,而是通过 php
。
所以,先从数据库中获取,然后$isVerified = password_verify($pass, $hashFromDB);