密码匹配,但if语句失败

时间:2013-05-27 03:34:06

标签: php if-statement

我最近进行了一次对话,这让我发现我一直在不正确地存储密码。我一直使用md5并认为它足够安全。但经过一些阅读后我发现并非如此,因此我正在转向bcrypt

无论如何,我正在创建登录处理器,但是一旦我用已知的salt加密用户提供的密码,它就说明密码不相等,但是当我回复它们时,它们是相同的。

以下是代码:

$username = $_POST['username'];
$password = $_POST['password'];

/*find that username in the database and grab their info*/
$check_username = "SELECT * FROM users WHERE username = ?";
    $query_username = $conn->prepare($check_username);
            $query_username->execute(array($username));
                $count = $query_username->rowCount();

    if($count > 0)/*if the user was found in the database*/
        {       
while($row = $query_username->fetch())
            {
                $salt = $row['salt'];
                $password_encrypted = $row['password'];
                $encrypt_password = crypt($password, $salt);

                if ($encrypt_password == $row['password'])
                    {
                        echo "success";
                    }
                else
                    {
                        var_dump($encrypt_password);
                        echo "<br />";
                        var_dump($row['password']);
                    }
            }
}

不确定为什么这个if语句失败,希望你们中的一个人能看到我所遗漏的内容。提前谢谢。

推出vardumps:

string(60) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee" 
string(61) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee"

发现错误,我使用二进制作为将列更改为60的列解决了问题。感谢您使用vardump的建议

1 个答案:

答案 0 :(得分:2)

不要使用echo或至少在没有硬边界的情况下不使用它。否则,您具有与以下两行似乎生成相同输出的相同情况:

print "hello"
print "hello     "

使用var_dump或者,如果必须回显,则回显变量,使HTML呈现器不会填充输出,例如使用<pre>带有[]分隔符的代码。