如果我将密码哈希20次,费用为:
$Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20])
然后我将它存储在我的数据库中,我如何让用户登录我的网站,如果我知道的password_verify()
,请“一次”哈希密码?
我需要做password_verify ($password,$storedPassword)
20次吗?
或者有更简单的方法吗?我看到了一个password_needs_rehash,我已经尝试过使用它,但它没有用。
答案 0 :(得分:0)
我在一段时间后找到了解决方案
$Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20]);
password_verify($PasswordInputByUser, $Pass1);
这么简单!
答案 1 :(得分:0)
<?php
$Pass = 'greatPassword1';
$Pass1 = password_hash( $Pass, PASSWORD_DEFAULT, ['cost' => 12] );
echo $Pass1;
$ Pass1是$ 2y $ 12 $ cnxAUfdMyA67QmsCW.x2aOVxvSyLPb / idLgklfAJOG5BPDcNlV1ba
在散列密码的开头你会看到$ 2y $ 12 $,你会看到你创建的所有密码在开始时都会有相同的东西。这就是PHP了解算法和成本的方式。因此,当您想要验证密码是否相同时,您所要做的就是:
$verified = password_verify('greatPassword1', $Pass1);
// True
$verified = password_verify('wrongPassword1', $Pass1);
// False
如果你使用20的成本,你很可能会在散列密码的开头看到$ 2y $ 20 $。我的PHP没有设置为允许超过30秒的执行时间,所以我改为较低的成本值。