password_hash每次返回不同的值

29

我正在制作一个登录系统,想要将密码进行哈希加密以使其更安全,但每次返回的哈希值都不同,并且甚至无法使用password_verify()进行验证。以下是我的代码:

$password = password_hash($password4, PASSWORD_DEFAULT);

这是我用来验证的代码:

if(password_verify($password4, $dbpassword))

2
你不应该那样使用 password_hash() - Jay Blanchard
4
@ItzBenteThePig,那种说法是不正确的——增加哈希处理反而会带来问题,而不是解决方案。想一想你要保护什么。password_hash()如果使用正确,会提供随机盐和长哈希值,需要数百年才能破解。 - Jay Blanchard
1
另一个注意事项:不要限制密码。 密码短语是提高安全性的关键。 - Jay Blanchard
1
我回滚到您最初的问题,因为隐秘编辑使得您的函数似乎无法正常工作。额外的函数调用是让您陷入困境的原因,将其删除会改变问题的本质。 - Jay Blanchard
1
如果我仍然遇到同样的问题,我认为那不是导致问题的原因,因此我认为这并没有改变问题的本质,只是改变了问题的外观。@JayBlanchard - ItzBenteThePig
显示剩余10条评论
1个回答

55

那我们就一步步来

但每次它返回不同的哈希值

这就是设计思路。 password_hash 每次生成一个随机的盐值,这意味着你必须单独破解每个哈希值而不能猜测用于所有哈希值的盐值并获得极大优势。

没有必要使用 MD5 或进行其他哈希操作。如果想要提高 password_hash 的安全性,可以传递更高的成本参数(默认成本为10)。

$password = password_hash($password4, PASSWORD_DEFAULT, ['cost' => 15]);

关于验证

if(password_verify($password4, $dbpassword))

所以$password4应该是您未经散列处理的密码,$dbpassword应该是您存储在数据库中的哈希值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接