= 5.5.0, PHP 7, PHP 8)hash_pbkdf2 — 生成所提供密碼的 PBKDF2 密鑰導(dǎo)出說明hash_pbkdf2( string $algo, string $password, string $salt, in">

hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

hash_pbkdf2生成所提供密碼的 PBKDF2 密鑰導(dǎo)出

說明

hash_pbkdf2(
    string $algo,
    string $password,
    string $salt,
    int $iterations,
    int $length = 0,
    bool $raw_output = false
): string

參數(shù)

algo

哈希算法名稱,例如 md5sha256,haval160,4 等。 受支持的算法清單請參見 hash_algos()。

password

要進(jìn)行導(dǎo)出的密碼。

salt

進(jìn)行導(dǎo)出時(shí)所使用的“鹽”,這個(gè)值應(yīng)該是隨機(jī)生成的。

iterations

進(jìn)行導(dǎo)出時(shí)的迭代次數(shù)。

length

密鑰導(dǎo)出數(shù)據(jù)的長度。如果 raw_outputtrue, 此參數(shù)為密鑰導(dǎo)出數(shù)據(jù)的字節(jié)長度。如果 raw_outputfalse, 此參數(shù)為密鑰導(dǎo)出數(shù)據(jù)的字節(jié)長度的 2 倍,因?yàn)?1 個(gè)字節(jié)數(shù)據(jù)對應(yīng)的 2 個(gè) 16 進(jìn)制的字符。

如果傳入 0,則使用所選算法的完整輸出大小。

raw_output

設(shè)置為 true 輸出原始二進(jìn)制數(shù)據(jù), 設(shè)置為 false 輸出小寫 16 進(jìn)制字符串。

返回值

如果 raw_output 設(shè)置為 true, 則返回原始二進(jìn)制數(shù)據(jù)表示的信息摘要, 否則返回 16 進(jìn)制小寫字符串格式表示的信息摘要。

錯(cuò)誤/異常

在以下情況下會(huì)產(chǎn)生 E_WARNING: 指定了未知的算法, iterations 小于等于 0, length 小于等于 0 或者 salt 過長(大于 INT_MAX - 4)。

更新日志

版本 說明
7.2.0 不再支持非加密的哈希函數(shù)(adler32,crc32,crc32b,fnv132,fnv1a32,fnv164,fnv1a64,joaat)。

范例

示例 #1 hash_pbkdf2() 例程,基礎(chǔ)用法

<?php
$password 
"password";
$iterations 1000;

// 使用 openssl_random_pseudo_bytes(),random_bytes(),或者其他合適的隨機(jī)數(shù)生成函數(shù)
// 來生成隨機(jī)初始向量
$salt openssl_random_pseudo_bytes(16MCRYPT_DEV_URANDOM);

$hash hash_pbkdf2("sha256"$password$salt$iterations20);
echo 
$hash;
?>

以上例程的輸出類似于:

120fb6cffcf8b32c43e7

注釋

警告

為了安全起見,可以使用 PBKDF2 方法對密碼明文進(jìn)行哈希運(yùn)算后再存儲(chǔ)。 但是更好的方案是使用 password_hash() 函數(shù) 或者使用 CRYPT_BLOWFISH 算法調(diào)用 crypt() 函數(shù)。

參見