小编典典

如何使用PHP的password_hash哈希和验证密码

php

最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在尝试学习如何制作自己的脚本以为每个用户生成盐的努力之后,我偶然发现了password_hash

据我了解(基于本页的阅读内容),当您使用时,盐已经在行中生成password_hash。这是真的?

我的另一个问题是,吃2种盐不是很聪明吗?一个直接在文件中,另一个在数据库中?这样,如果有人破坏了数据库中的盐,您仍然直接在文件中保留了盐吗?我在这里读到,存储盐从来都不是一个聪明的主意,但是它总是让我感到困惑。


阅读 634

收藏
2020-05-26

共1个答案

小编典典

password_hash建议使用来存储密码。不要将它们分开到数据库和文件中。

假设我们有以下输入:

$password = $_POST['password'];

我不仅仅为了理解概念而验证输入。

您首先通过执行以下操作对密码进行哈希处理:

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

然后查看输出:

var_dump($hashed_password);

如您所见,它是散列的。(我假设您已执行这些步骤)。

现在,您将此hashed_pa​​ssword存储在数据库中,确保您的password列足够大以容纳哈希值(至少60个字符或更长)。当用户要求登录时,通过执行以下操作,可以在数据库中检查带有此哈希值的密码输入:

// Query the database for username and password
// ...

if(password_verify($password, $hashed_password)) {
    // If the password inputs matched the hashed password in the database
    // Do something, you know... log them in.
}

// Else, Redirect them back to the login page.
2020-05-26