根据(相对)新的PHP文档:
password_hash函数使用随机盐(我们不应该担心...... O_O),所以如果我理解正确,盐必须存储在某个地方,否则用户将无法登录注册到一个网站(不同的盐=>不同的哈希。)
函数文档没有说明与数据库交互的任何内容,因为我认为存储每个用户数据只能通过数据库进行扩展,那么该功能存储随机盐吗?会话数据之类的txt
文件?
答案 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)
使用的算法,成本和salt作为哈希的一部分返回。 因此,验证哈希所需的所有信息都是 包括在内。这允许password_verify()函数进行验证 哈希不需要盐或算法的单独存储 信息。
因此,盐已经包含在数据库中保存的哈希值中。