PHP Hash方法如何改变?

时间:2015-01-24 21:10:58

标签: php algorithm hash

在PHP网站上:http://php.net/manual/en/password.constants.php,声明如下:

  

PASSWORD_DEFAULT integer)   如果未提供算法,则用于散列的默认算法。当支持更新,更强大的哈希算法时,这可能会在较新的PHP版本中发生变化。

     

值得注意的是,随着时间的推移,这个常数会(并且可能会)发生变化。因此,您应该知道生成的哈希的长度可以更改。因此,如果您使用 PASSWORD_DEFAULT ,则应该以可以存储超过60个字符的方式存储生成的哈希值(255是推荐的宽度)。

这怎么可能?如果有人设置了他们的密码,并且在数据库中设置了哈希值,然后方法发生了变化,他们将无法进入,因为该方法会产生不同的哈希值,不会吗?

1 个答案:

答案 0 :(得分:2)

使用hash_password()函数散列密码时,返回字符串中包含有关所用算法和成本的信息。因此,password_verify()始终可以检查提供的密码在给定特定散列时是否有效。

请参阅password_hash()的文档:

  

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

还有函数password_needs_rehash()可用于检查是否已使用旧算法计算某个散列,在这种情况下,必须计算新的散列。由于在登录时密码以明文形式提供,因此您可以(并且应该)在需要时重新输入密码。

有关值随时间变化的文档中的警告是让用户意识到计算的散列的长度可能会发生变化。但是,这些功能旨在向后兼容较旧(通常较短)的哈希值。