比较密码和从数据库查询的哈希值?

时间:2014-03-20 01:05:10

标签: php mysql hash

我向php发送密码以与存储在数据库中的哈希进行比较。

我的php是:

$enteredUser = $_POST["username"];
$enteredPass = $_POST["password"];
$query = mysqli_query($con, "SELECT passhash FROM user WHERE `username` = '$enteredUser'");
$passHash = mysql_result($query, 0);
if(password_verify($enteredPass, $passHash)){
    echo "success";
}else{
    echo "failure";
}

我也尝试过使用mysqli_fetch_array(),但它仍然无效。有谁知道为什么这不起作用?提前感谢任何可以提供帮助的人。 (在旁注上,$passHash返回null)

3 个答案:

答案 0 :(得分:1)

你混合了两个扩展,mysqli和mysql - mysqli_query然后mysql_result

您也可以使用SQL注入,并且应该在将POST输入直接传递给MySQL之前对其进行清理。

mysqli_query返回一个结果对象,然后您需要从该对象中获取结果。

mysqli_fetch_row将返回一行。

$enteredUser = $_POST["username"];
$enteredPass = $_POST["password"];
//...
$resultset = mysqli_query($con, "SELECT passhash FROM user WHERE `username` = '$enteredUser'");
$result = mysqli_fetch_row($resultset);
if(password_verify($enteredPass,$result[0])){
    echo "success";
}else{
    echo "failure";
}

答案 1 :(得分:0)

尝试一下:

$enteredUser = mysqli_real_escape_string($con,$_POST["username"]);
$enteredPass = mysqli_real_escape_string($con,$_POST["password"]);

$sql = "SELECT * FROM `user` WHERE `username` = '$enteredUser'";
$result = $con->query($sql);
if ($result->num_rows === 1) {
    $row = $result->fetch_array(MYSQLI_ASSOC);
    if (password_verify($enteredPass, $row['passhash'])) 
    {
    echo "Success";
    }
    else {
    echo "Sorry";
    }

答案 2 :(得分:0)

我确实用一个简单的while循环解决了我自己的问题,我想它会正常工作,感谢大家的意见:

$passHash = ''; 
while ($row = mysqli_fetch_array($query)) { 
    $passHash .= $row["passhash"]; 
}