PHP - password_needs_rehash() 函数



PHP 哈希password_needs_rehash()函数用于确定给定哈希是否与给定选项匹配,并检查哈希是否需要重新哈希。在 PHP 中,“哈希”是指由哈希算法生成的固定大小的字符字符串。输入数据可以是任何大小,算法会根据该输入生成唯一的输出。

选项通常包括使用的算法和各种参数,例如成本,这些参数会影响哈希过程的安全性与性能。

如果哈希可以重新哈希以匹配给定的算法和选项,则此函数返回布尔值“true”;否则,它返回“false”。

语法

以下是 PHP 哈希 password_needs_rehash() 函数的语法:

password_needs_rehash(string $hash, string $algo, array $options = []): bool

参数

此函数接受以下参数:

  • hash - 由 password_hash() 函数创建的哈希。
  • algo - 密码算法常量,表示哈希密码时要使用的算法。
  • options - 包含选项的关联数组。

返回值

如果应重新哈希哈希以匹配给定的 algo 和 options,则此函数返回 true,否则返回 false。

示例 1

以下程序演示了 PHP 哈希password_needs_rehash()函数的用法:

<?php
   $passw = "53nh46u74m3nt3";
   $hashp = '$argon2i$v=19$m=65536,t=4,p=1$dmJMWlhFUEFvaTFSeFhFNQ$Cpgdj1rHw21Y7WqnMpUAFFp7uLubGoU7Zxc09Pn8t9k';
   $algo = PASSWORD_ARGON2I;
   $options = ['cost' => 12];
   $conf = password_needs_rehash($hashp, $algo);
   echo "The given password: $passw";
   echo "\nThe given password hash: $hashp";
   echo "\nThe given algo: $algo";
   $result = password_needs_rehash($hashp, $algo, $options);
   if($result){
	   $newhas = password_hash($passw, $algo);
	   echo "\nThe function result: ";
	   var_dump($result);
	   echo "Hash need to rehashed, Suggested for the new hash: \n";
	   echo $newhas;
	   }
   else {
	   echo "\nThe function result: ";
	   var_dump($result);
	   echo "Matched, no need to be rehashed: ";
   }
?>

输出

上述程序产生以下输出:

The given password: 53nh46u74m3nt3
The given password hash: $argon2i$v=19$m=65536,t=4,p=1$dmJMWlhFUEFvaTFSeFhFNQ$Cpgdj1rHw21Y7WqnMpUAFFp7uLubGoU7Zxc09Pn8t9k
The given algo: argon2i
The function result: bool(false)
Matched, no need to be rehashed:

示例 2

如果给定的哈希与给定的选项不匹配,则此函数返回“true”。

以下是 PHP 哈希password_needs_rehash()函数的另一个示例。我们使用此函数来检查给定的哈希是否与给定的选项匹配:

<?php
   $passw = "53nh46u74m3nt3";
   $hashp = '$argon2i$v=19$m=1024,t=2,p=2$d1JJWnNHMkVEekZwcTFUdA$zeSi7c/Adh/1KCTHddoF39Xxwo9ystxRzHEnRa0lQeM';
   $algo = PASSWORD_ARGON2I;
   $options = ['cost' => 12];
   $conf = password_needs_rehash($hashp, $algo);
   echo "The given password: $passw";
   echo "\nThe given password hash: $hashp";
   echo "\nThe given algo: $algo";
   $result = password_needs_rehash($hashp, $algo, $options);
   if($result){
	   $newhas = password_hash($passw, $algo);
	   echo "\nThe function result: ";
	   var_dump($result);
	   echo "Hash need to rehashed, suggested for the new hash: \n";
	   echo $newhas;
	   }
   else {
	   echo "\nThe function result: ";
	   var_dump($result);
	  echo "\nMatched, no need to be rehashed: ";
   }
?>

输出

执行上述程序后,将显示以下输出:

The given password: 53nh46u74m3nt3
The given password hash: $argon2i$v=19$m=1024,t=2,p=2$d1JJWnNHMkVEekZwcTFUdA$zeSi7c/Adh/1KCTHddoF39Xxwo9ystxRzHEnRa0lQeM
The given algo: argon2i
The function result: bool(true)
Hash need to rehashed, suggested for the new hash:
$argon2i$v=19$m=65536,t=4,p=1$amw3ZHM3bEpYN3lWYlp6eg$wNWs5nkT2/Yx7NXkOJ4TZ4EqUmc58Xhb6N3IX5shNc8
php_function_reference.htm
广告