PHP password_hash 每次都变

PHP password_hash changing every time

我有密码

 echo password_hash( 'i=badatphp', PASSWORD_BCRYPT, [ 'cost' => 10 ] );

每次我运行脚本更改密码

我用的是PHP 7,在PHP 5以前可以设置盐,现在不行了

我该如何克服不知道盐是什么的问题?

您每次 运行 password_hash 这种方式时可能会看到一个新散列的原因是它会自动生成一个新的随机盐,这将导致不同的散列 即使输入的密码相同.

虽然从 PHP 7 开始,salt 选项已 弃用 ,但绝对不会从 password_hash 中删除。不过,您应该注意到它被 弃用 的原因是因为它计划被删除(可能在 PHP 的下一个次要版本中)。计划将其移除的原因是因为它会阻止人们使用劣质的方法来生产盐。由于该函数可以自动为您生成良好的随机盐,因此几乎没有理由想要提供您自己的盐。

在任何情况下,password_hash 只是 crypt 的薄包装,它暴露了底层 API 的更多原语。所以如果你想通过 crypt 提供你自己的盐,你仍然可以。虽然我非常不鼓励 PHP 可以用 password_hash 以不太可能导致错误的方式为你做这件事。

The used algorithm, cost and salt are returned as part of the hash. Therefore, all information that's needed to verify the hash is included in it. This allows the password_verify() function to verify the hash without needing separate storage for the salt or algorithm information. http://php.net/manual/en/function.password-hash.php

如文档所述,盐生成并存储在返回的哈希中,因此无需将盐传递给函数或单独存储它。

有关如何使用 password_hash 的简单示例,请参阅 答案。