我正在尝试按照this website实施安全的用户身份验证。但我在从php password_hash函数存储字符串结果时遇到问题。我的意思是,这完美无缺:
$pass = "anypassyouwant";
$stored = password_hash(
base64_encode(
hash('sha256', $pass, true)
),
PASSWORD_DEFAULT
);
// ...
if (password_verify(
base64_encode(
hash('sha256', $pass, true)
),
$stored
)) {
echo "TRUE";
} else {
echo "FALSE";
}
在真实应用程序中,我将“$ stored”存储在我的数据库中,并将其用于password_verify,但我得到的只是一个错误。由于上面的代码工作正常,唯一合理的解释是DB中的存储。 Varchar和二进制文件无效。
有谁知道我应该如何储存它?
提前致谢。
我的插入说明:
$sql = sprintf("
INSERT INTO tbl_usuarios (nombre, apellidos, password, email, fechanac, url_in, sexo)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %u)",
$nombre,
$apellidos,
$pass,
$bd->escape($_POST['email']),
$fechanac,
$url_in,
$sexo
);
pass是password_hash的结果。我尝试了%s和%b(db中的varchar和binary)。
答案 0 :(得分:0)
在您发布的插入代码中,您引用变量$pass
而不是存储的是密码的哈希和base64编码版本。您可能需要更新SQL查询以使用$stored
变量而不是$pass
。
此外,在调试时,将从数据库中检索的内容与散列输入的内容进行比较将会很有帮助。这可能会显示您意外存储了明文密码而不是散列版本。