Amb*_*ons 9 php passwords hash php-password-hash
使用PHP考虑这行代码:
$password = password_hash($password, PASSWORD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
如果他们更改了默认密码哈希算法会发生什么?我的意思是我将在数据库中使用哈希密码.然后,根据我自己的理解,检查密码是不可能的,因为哈希算法将完全改变.
Nar*_*arf 10
接下来会发生的是,新散列的密码将使用新算法 - 显然.
但是,您不应该担心这一点,因为整个事情的设计都考虑了前向兼容性 - 只要您password_*()
正确使用这些函数,默认算法更改时您的代码就不会被破坏.
通过正确,我的意思是使用password_verify()
.
password_verify()
接受纯文本密码和哈希,它可以通过查看您提供的哈希来轻松确定所使用的算法是什么.因此,它仍然能够验证使用旧算法进行哈希处理的密码 - 不仅仅是前一个算法,而是任何支持的算法.
事实上,PASSWORD_DEFAULT
常量的唯一目的是您可以轻松地将旧哈希迁移到新算法(一旦添加一个).这通过以下方式发生:
password_verify()
(任何具有PASSWORD_<name>
常量的散列算法)验证其密码.password_needs_rehash()
,如果你刚验证的密码是使用较旧的算法(或较低的'cost'参数),它将返回布尔值TRUE.
总而言之 - 它是一个非常,非常精心设计的API,它解决了你甚至没想过的问题.别担心.
编辑(在评论中注明):
然而,应该注意的是,新算法很可能导致较长的散列长度,因此如果您将密码存储在数据库中 - 请不要限制字段的长度(即使用varchar(255)
字段).
小智 5
为了澄清起见,我想补充一下PHP使用以下结构的答案。因此,password_needs_rehash()
和password_verify()
函数将检查算法和成本,并进行工作以保持所有内容的兼容性和正确性。
来源:http://php.net/manual/en/faq.passwords.php
归档时间: |
|
查看次数: |
518 次 |
最近记录: |