函數(shù)名:password_needs_rehash()
適用版本:PHP 5 >= 5.5.0, PHP 7
函數(shù)描述:password_needs_rehash() 函數(shù)用于檢查給定的哈希是否需要重新計(jì)算,以適應(yīng)當(dāng)前密碼哈希算法的更改或參數(shù)的更改。
用法: bool password_needs_rehash ( string $hash , int $algo [, array $options ] )
參數(shù):
- $hash:要檢查的密碼哈希。
- $algo:用于計(jì)算哈希的密碼算法的常量??梢允褂?PASSWORD_DEFAULT 常量,也可以直接傳遞算法的整數(shù)值,如 PASSWORD_BCRYPT。
- $options(可選):一個(gè)關(guān)聯(lián)數(shù)組,包含算法的參數(shù)。例如,對(duì)于 PASSWORD_BCRYPT 算法,可以通過設(shè)置 "cost" 選項(xiàng)來指定計(jì)算哈希的計(jì)算成本。更多算法特定的選項(xiàng)可以參考 PHP 手冊(cè)。
返回值:如果需要重新計(jì)算哈希,則返回 true,否則返回 false。
示例:
$hash = '$2y$10$GZGK1b6d9sm2r3rBj6tG6e6d7XmEYv0k3S6Kq6YH4I6cZ4s5q6w5G';
$needsRehash = password_needs_rehash($hash, PASSWORD_DEFAULT);
if ($needsRehash) {
// 重新計(jì)算哈希并存儲(chǔ)新的哈希值
$newHash = password_hash('password123', PASSWORD_DEFAULT);
// 更新數(shù)據(jù)庫中的密碼哈希值
// $newHash 存儲(chǔ)到數(shù)據(jù)庫中
} else {
// 哈希仍然是最新的,無需重新計(jì)算
echo "密碼哈希仍然是最新的。";
}
在上面的示例中,我們首先檢查給定的哈希是否需要重新計(jì)算。如果需要重新計(jì)算,我們使用 password_hash() 函數(shù)生成一個(gè)新的哈希,并將其存儲(chǔ)到數(shù)據(jù)庫中。如果哈希仍然是最新的,我們只需輸出一條消息。