我有代码
echo password_hash( 'i=badatphp', PASSWORD_BCRYPT, [ 'cost' => 10 ] );
每次我运行脚本时,密码都会更改
我正在使用 PHP 7,在 PHP 5 中我曾经能够设置盐,但现在我不能
我应该如何克服不知道盐是什么?
我有代码
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
你仍然可以。password_hash
虽然我非常不鼓励 PHP 能够以一种不太可能导致错误的方式为你做这件事。
使用的算法、成本和盐作为散列的一部分返回。因此,验证哈希所需的所有信息都包含在其中。这允许 password_verify() 函数验证哈希,而无需单独存储盐或算法信息。 http://php.net/manual/en/function.password-hash.php
正如文档所述,盐被生成并存储在返回的哈希中,因此无需将盐传递给函数或单独存储。
有关如何使用的简单示例,请参阅此password_hash
答案。