PHP哈希方法如何改变?

PHP哈希方法如何改变?,php,algorithm,hash,Php,Algorithm,Hash,在PHP的网站上,如下所述: 密码\u默认值() 如果未提供算法,则用于哈希的默认算法。当支持更新、更强的散列算法时,在较新的PHP版本中可能会发生变化 值得注意的是,随着时间的推移,这个常数可能会(而且很可能会)改变。因此,您应该知道结果散列的长度可能会改变。因此,如果使用密码\u默认值,则应以可存储60个以上字符(255是建议的宽度)的方式存储生成的哈希 这怎么可能?如果有人设置了密码,并且在数据库中设置了散列,然后方法更改,他们将无法进入,因为该方法将生成不同的散列,不是吗?使用hash_

在PHP的网站上,如下所述:

密码\u默认值() 如果未提供算法,则用于哈希的默认算法。当支持更新、更强的散列算法时,在较新的PHP版本中可能会发生变化

值得注意的是,随着时间的推移,这个常数可能会(而且很可能会)改变。因此,您应该知道结果散列的长度可能会改变。因此,如果使用密码\u默认值,则应以可存储60个以上字符(255是建议的宽度)的方式存储生成的哈希


这怎么可能?如果有人设置了密码,并且在数据库中设置了散列,然后方法更改,他们将无法进入,因为该方法将生成不同的散列,不是吗?

使用hash_password()函数散列密码时,有关所用算法和成本的信息将包含在返回字符串中。因此,password_verify()总是可以在给定某个哈希值的情况下检查提供的密码是否有效

有关以下内容,请参阅文档:

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

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


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

那么就不要使用默认密码。你认为他们应该继续使用不安全的算法来确保向后的可比性吗?@Dagon password\u verify()是向后兼容的。只需搜索
password\u DEFAULT
就可以得到181个结果。幸运的是,你不必全部阅读。这个问题已经是你问题的重复。5天前才问过。