如何验证password_hash生成的密码($ password,PASSWORD_DEFAULT);

时间:2016-08-25 06:38:12

标签: php hash passwords

password_hash($password, PASSWORD_DEFAULT); 函数将用户插入的密码存储到mysql数据库中但是 当我尝试使用

检查登录时
$verify_password=password_verify ($password,PASSWORD_DEFAULT);
它显示错误,所以任何人都告诉我错误是什么。在passwordverify php函数中,默认参数如password_verify ( string $password , string $hash ),这里的$ hash是什么。

2 个答案:

答案 0 :(得分:1)

传递给password_verify()函数的参数是错误的。使用存储的哈希作为第二个参数:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

答案 1 :(得分:0)

使用password_hash而不是使用password_verify。

$verify_password=password_hash($password,PASSWORD_DEFAULT);

password_hash()使用强大的单向散列算法创建新密码哈希。 password_hash()与crypt()兼容。因此,crypt()创建的密码哈希值可以与password_hash()一起使用。

目前支持以下算法:

PASSWORD_DEFAULT - 使用bcrypt算法(默认自PHP 5.5.0起)。请注意,此常量旨在随着时间的推移而变化,因为新的和更强大的算法被添加到PHP中。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。这将使用“$ 2y $”标识符生成标准的crypt()兼容哈希。结果将始终为60个字符的字符串,或者失败时为FALSE。 支持的选项:

  • salt用于在散列密码时手动提供盐。请注意,这将覆盖并防止自动生成salt。

如果省略,则每个密码哈希值都会通过password_hash()生成随机盐。这是预期的操作模式。

  • 成本,表示应该使用的算法成本。可以在crypt()页面上找到这些值的示例。

如果省略,将使用默认值10。这是一个很好的基准成本,但您可能需要考虑根据硬件增加它。