如何在mysql DB中存储php password_hash

时间:2015-07-20 20:02:33

标签: php mysql hash passwords

我正在尝试按照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)。

1 个答案:

答案 0 :(得分:0)

在您发布的插入代码中,您引用变量$pass而不是存储的是密码的哈希和base64编码版本。您可能需要更新SQL查询以使用$stored变量而不是$pass

此外,在调试时,将从数据库中检索的内容与散列输入的内容进行比较将会很有帮助。这可能会显示您意外存储了明文密码而不是散列版本。