关于使用argon2i哈希密码

时间:2018-07-02 11:01:31

标签: php security hash

我设置了一个开发服务器,并用php-fpm和7.2 php安装了nginx(我安装了所有必需的php软件包)。

是时候使用argon2i算法升级所有登录的安全性了。 因此,我尝试了这一点(在开发环境中测试代码。代码中的安全性将在以后发布):

require('connector.php');

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

$usr = mysqli_real_escape_string($conn, $usr_u);
$psw = mysqli_real_escape_string($conn, $psw_u);

$f_pass = password_hash($psw, PASSWORD_ARGON2I);

$result = "SELECT `username` FROM `users` WHERE username = '$usr'";
$tbl = mysqli_query($conn, $result);

$table = $tbl->fetch_assoc();
$m_user = $table['username'];

if ($m_user == $usr)
{
//correct username
    echo 'Correct username!<br>';

    $result = "SELECT `password` FROM `users` WHERE username = '$m_user'";
    $tbl = mysqli_query($conn, $result);

    $table = $tbl->fetch_assoc();
    $m_pass = $table['password'];


    if (password_verify($m_pass,$f_pass)) //always returns false
    {
        echo 'Password correct!<br>';
    }
    else
    {
        echo 'Wrong password!<br>';
    }
}
else
{
    echo 'Wrong username!<br>';
}
//close connection
mysqli_close($conn);

我总是得到“正确的用户名!”和“密码错误!”。我在数据库和输入中对哈希密码使用了echo,我发现每次哈希密码都不相同。我认为哈希过程包括使用随机盐,这是我的问题。

据我了解,为了保持哈希的安全性,随机盐是必需的。

您能指出我正确的方向,如何解决这个问题?我的数据库中有哈希密码,但我想不出一种方法来对照数据库中的输入密码(使用password_verify和hash_equals)来检查输入密码。

提前感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

查看password_verify的文档:

Red

第一个参数是密码,但是您要向其传递要与之比较的哈希值

第二个参数是您想要与之进行比较的哈希,但您正在传递它根据用户输入创建的新哈希

bool password_verify ( string $password , string $hash )