hash_pbkdf2
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
hash_pbkdf2 — 產生所提供密碼的 PBKDF2 金鑰導出
說明
string
$algo,string
$password,string
$salt,int
$iterations,int
$length = 0,bool
$raw_output = false): string
參數
- 
algo
- 
      雜湊演算法名稱,例如 md5,sha256,haval160,4等。 受支援的演算法清單請參見 hash_algos()。
- 
password
- 
      要進行導出的密碼。 
- 
salt
- 
      進行導出時所使用的「鹽」,這個值應該是隨機產生的。 
- 
iterations
- 
      進行導出時的迭代次數。 
- 
length
- 
      金鑰導出數據的長度。如果 raw_output為true, 此參數為金鑰導出數據的位元組長度。如果raw_output為false, 此參數為金鑰導出數據的位元組長度的 2 倍,因為 1 個位元組數據對應的 2 個 16 進位制的字元。如果傳入 0,則使用所選演算法的完整輸出大小。
- 
raw_output
- 
      設定為 true輸出原始二進制數據, 設定為false輸出小寫 16 進位制字串。
返回值
   如果 raw_output 設定為 true, 
   則返回原始二進制數據表示的資訊摘要,
   否則返回 16 進位制小寫字串格式表示的資訊摘要。
  
錯誤/異常
   在以下情況下會產生 E_WARNING:
   指定了未知的演算法,
   iterations 小於等於 0,
   length 小於等於 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(16, MCRYPT_DEV_URANDOM);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
echo $hash;
?>
以上例程的輸出類似於:
120fb6cffcf8b32c43e7
註釋
    爲了安全起見,可以使用 PBKDF2 方法對密碼明文進行雜湊運算后再儲存。
    但是更好的方案是使用 password_hash() 函式
    或者使用 CRYPT_BLOWFISH 演算法呼叫 
    crypt() 函式。
   
參見
- crypt() - 單向字串雜湊
- password_hash() - 建立密碼的雜湊(hash)
- hash() - 產生雜湊值 (訊息摘要)
- hash_algos() - 返回已註冊的雜湊演算法列表
- hash_init() - 初始化增量雜湊運算上下文
- hash_hmac() - 使用 HMAC 方法產生帶有金鑰的雜湊值
- hash_hmac_file() - 使用 HMAC 方法和給定檔案的內容產生帶金鑰的雜湊值
- openssl_pbkdf2() - 產生一個 PKCS5 v2 PBKDF2 字串