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 字串