php - 如何使用 PHP 的 password_hash 来散列和验证密码

标签 php salt password-hash php-password-hash

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

据我了解(基于对 this page 的阅读),当您使用 password_hash 时,该行中已经生成了盐。这是真的?

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

最佳答案

使用 password_hash 是存储密码的推荐方式。不要将它们分离到 DB 和文件中。

假设我们有以下输入:

$password = $_POST['password'];

您首先通过这样做来散列密码:

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

然后看输出:

var_dump($hashed_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.

Official Reference

关于php - 如何使用 PHP 的 password_hash 来散列和验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279321/

相关文章:

c# - 登录时比较散列和加盐密码的加密

javascript - 创建一个只能从 JS 访问的 cookie,并且不会随每个请求一起发送/

php - Password_hash 和默认盐是否足够?

node.js - bcrypt 与 Node 一起使用的替代方案是什么?

php - 不方便将文件升级到 git 上的远程存储库

PHP通过下拉列表显示来自mysql的用户数据

php - MySQL 表 1 归档 DATETIME 格式

javascript - 如何使用ajax上传文件图片?

php - PHP密码盐真的有必要吗?

php - 哪个mysql函数等于php;密码哈希?