= 5.5.0, PHP 7, PHP 8)hash_pbkdf2 — 生成所提供密碼的 PBKDF2 密鑰導(dǎo)出說明hash_pbkdf2( string $algo, string $password, string $salt, in">
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
hash_pbkdf2 — 生成所提供密碼的 PBKDF2 密鑰導(dǎo)出
$algo
,$password
,$salt
,$iterations
,$length
= 0,$raw_output
= false
algo
哈希算法名稱,例如
md5
,sha256
,haval160,4
等。
受支持的算法清單請參見 hash_algos()。
password
要進行導(dǎo)出的密碼。
salt
進行導(dǎo)出時所使用的“鹽”,這個值應(yīng)該是隨機生成的。
iterations
進行導(dǎo)出時的迭代次數(shù)。
length
密鑰導(dǎo)出數(shù)據(jù)的長度。如果 raw_output
為 true
,
此參數(shù)為密鑰導(dǎo)出數(shù)據(jù)的字節(jié)長度。如果 raw_output
為 false
,
此參數(shù)為密鑰導(dǎo)出數(shù)據(jù)的字節(jié)長度的 2 倍,因為 1 個字節(jié)數(shù)據(jù)對應(yīng)的 2 個 16 進制的字符。
如果傳入 0
,則使用所選算法的完整輸出大小。
raw_output
設(shè)置為 true
輸出原始二進制數(shù)據(jù),
設(shè)置為 false
輸出小寫 16 進制字符串。
如果 raw_output
設(shè)置為 true
,
則返回原始二進制數(shù)據(jù)表示的信息摘要,
否則返回 16 進制小寫字符串格式表示的信息摘要。
在以下情況下會產(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(),或者其他合適的隨機數(shù)生成函數(shù)
// 來生成隨機初始向量
$salt = openssl_random_pseudo_bytes(16, MCRYPT_DEV_URANDOM);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
echo $hash;
?>
以上例程的輸出類似于:
120fb6cffcf8b32c43e7
為了安全起見,可以使用 PBKDF2 方法對密碼明文進行哈希運算后再存儲。
但是更好的方案是使用 password_hash() 函數(shù)
或者使用 CRYPT_BLOWFISH
算法調(diào)用
crypt() 函數(shù)。