为password_hash存储的盐在哪里?

时间:2015-02-20 14:59:05

标签: php password-protection

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

password_hash函数使用随机盐(我们不应该担心...... O_O),所以如果我理解正确,盐必须存储在某个地方,否则用户将无法登录注册到一个网站(不同的盐=>不同的哈希。)

函数文档没有说明与数据库交互的任何内容,因为我认为存储每个用户数据只能通过数据库进行扩展,那么该功能存储随机盐吗?会话数据之类的txt文件?

2 个答案:

答案 0 :(得分:8)

让我们以其他人告诉你的方式学习:

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

输出:

  

$ $ 2Y的 11 $的 ABCDEFGHIJKLMNOPQRSTU u7aZVUzfW85EB4mHER81Oudv / rT.rmWm

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

您可以将其吐回password_verify并相应处理:

print_r(password_verify('rasmuslerdorf', '$2y$11$abcdefghijklmnopqrstuu7aZVUzfW85EB4mHER81Oudv/rT.rmWm')); // true

答案 1 :(得分:3)

password_hash manual

  

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

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