產生所提供密碼的 PBKDF2 金鑰導出

hash_pbkdf2

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

hash_pbkdf2產生所提供密碼的 PBKDF2 金鑰導出

說明

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

參數

algo

雜湊演算法名稱,例如 md5sha256haval160,4 等。 受支援的演算法清單請參見 hash_algos()

password

要進行導出的密碼。

salt

進行導出時所使用的「鹽」,這個值應該是隨機產生的。

iterations

進行導出時的迭代次數。

length

金鑰導出數據的長度。如果 raw_outputtrue, 此參數為金鑰導出數據的位元組長度。如果 raw_outputfalse, 此參數為金鑰導出數據的位元組長度的 2 倍,因為 1 個位元組數據對應的 2 個 16 進位制的字元。

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

raw_output

設定為 true 輸出原始二進制數據, 設定為 false 輸出小寫 16 進位制字串。

返回值

如果 raw_output 設定為 true, 則返回原始二進制數據表示的資訊摘要, 否則返回 16 進位制小寫字串格式表示的資訊摘要。

錯誤/異常

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

更新日誌

版本 說明
7.2.0 不再支援非加密的雜湊函式(adler32,crc32,crc32b,fnv132,fnv1a32,fnv164,fnv1a64,joaat)。

範例

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

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

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

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

以上例程的輸出類似於:

120fb6cffcf8b32c43e7

註釋

警告

爲了安全起見,可以使用 PBKDF2 方法對密碼明文進行雜湊運算后再儲存。 但是更好的方案是使用 password_hash() 函式 或者使用 CRYPT_BLOWFISH 演算法呼叫 crypt() 函式。

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *