为password_hash存储的盐在哪里?

Gam*_*per 6 php password-protection

根据(相对)新的PHP文档:

password_hash功能使用随机盐(我们不应该担心.. O_O),所以如果我理解正确的盐具有保存在某个地方,否则用户将无法登录到网站之后登录(不同的盐=>不同的哈希值.)

函数文档没有说明与数据库交互的任何信息,因为我认为存储每个用户数据只能通过数据库进行扩展,那么该函数存储随机盐是什么?txt会话数据这样的文件?

sja*_*agr 9

让我们从其他人告诉你的例子中学习:

$options = [
    'cost' => 11,
    'salt' => 'abcdefghijklmnopqrstuv',
];
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT, $options)."\n";
Run Code Online (Sandbox Code Playgroud)

输出:

$ 2y $ 11 $ abcdefghijklmnopqrstu u7aZVUzfW85EB4mHER81Oudv/rT.rmWm

粗体部分是您的成本和盐,分别嵌入到生成的哈希中.

你可以把password_verify它吐回来,它将相应地处理它:

print_r(password_verify('rasmuslerdorf', '$2y$11$abcdefghijklmnopqrstuu7aZVUzfW85EB4mHER81Oudv/rT.rmWm')); // true
Run Code Online (Sandbox Code Playgroud)


Ani*_*gel 5

password_hash手册指出

使用的算法、成本和盐作为哈希的一部分返回。因此,验证哈希所需的所有信息都包含在其中。这允许password_verify()函数验证哈希值,而不需要单独存储salt或算法信息。

因此,盐已经包含在您保存在数据库中的哈希中。

  • 是的,人们已经说过了,而且方式不止一种;-)如果我知道的话,我会把我的“评论”作为“答案”并赚大钱!*呜呼!* (3认同)