用成本散列一个password_hash

时间:2017-08-20 14:21:41

标签: php password-hash

如果我将密码哈希20次,费用为:

$Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20])

然后我将它存储在我的数据库中,我如何让用户登录我的网站,如果我知道的password_verify(),请“一次”哈希密码?

我需要做password_verify ($password,$storedPassword) 20次吗? 或者有更简单的方法吗?我看到了一个password_needs_rehash,我已经尝试过使用它,但它没有用。

2 个答案:

答案 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秒的执行时间,所以我改为较低的成本值。