PHP 密码哈希函数

PHP password_needs_rehash() 函数用于检查给定的哈希是否实现了所提供的算法和选项。如果不是,则假定需要重新哈希。

语法

password_needs_rehash(hash, algo, options) 

参数

hash必填。 指定由 password_hash() 创建的哈希值。
algo必填。 指定密码算法常量,表示对密码进行哈希处理时使用的算法。
options可选。 指定包含选项的关联数组。有关每种算法支持的选项的文档,请参阅密码算法常量

返回值

如果应重新散列哈希以匹配给定的算法选项,则返回true,否则为 false。

示例:password_needs_rehash() 示例

下面的示例显示了 password_needs_rehash() 函数的用法。

<?php
$password = 'myPassword';
$hash = "$2y$10$.SCsHZ4KA04AFwoRj6XOS.6iKtQzsO.ydxo6gOVbauASPEoV6cm4a";

//cost参数可以改变
//随着时间的推移,随着硬件的改进
$options = array('cost' => 11);

//根据纯文本密码验证存储的哈希值
if(password_verify($password, $hash)) {
  //检查是否有更新的哈希算法
  //可用或成本已更改
  if(password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) {
    //如果是,则创建一个新的哈希值,
    //并替换旧的
    $newHash = password_hash($password, PASSWORD_DEFAULT, $options);
  }
  //登录用户
}

//显示$hash和$newHash
//用于说明目的
echo $hash;
echo "\n";
echo $newHash;
?> 

上述代码的输出将是:

$2y$10$.SCsHZ4KA04AFwoRj6XOS.6iKtQzsO.ydxo6gOVbauASPEoV6cm4a
$2y$11$2WqyJXTttAT2JOTDECchz.DfqvpNdu5l6ICnl2rumXRsO9kUwX8Xa