我最近的一次谈话让我发现我一直在不正确地存储密码。我一直使用 md5 并认为它足够安全。然而,经过一番阅读,我发现情况并非如此,因此我正在切换到 bcrypt
无论如何,我正在创建登录处理器,但是一旦我用已知的盐加密用户提供的密码,它就会指出密码不相等,但是当我回显它们时,它们是相同的。
这是代码:
$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 的建议