PHP 哈希函数

PHP hash_pbkdf2() 函数用于生成所提供密码的 PBKDF2 密钥派生。

PBKDF2 代表基于密码的密钥派生函数 2。PBKDF2 密钥派生函数将伪随机函数(例如基于哈希的消息身份验证代码 (HMAC))应用于输入密码或消息以及盐值,并重复该过程多次生成派生密钥。它主要用于对密码进行哈希处理,PBKDF2 密钥派生函数的设计方式使得攻击者很难猜测哈希后的原始密码。

语法

hash_pbkdf2(algo, password, salt, 
            iterations, length, binary) 

参数

algo必填。 指定所选哈希算法的名称(即"md5"、"sha256"、"haval160,4"等)。可以使用 hash_algos() 函数找到支持的算法列表。
password必填。 指定用于派生的密码。
salt必填。 指定用于推导的盐。该值应随机生成。
iterations必填。 指定为推导执行的内部迭代次数。
length可选。 指定输出字符串的长度。如果 binary 为 true,则对应于派生密钥的字节长度,如果 binary 为 false,则对应于派生密钥的字节长度的两倍(因为密钥的每个字节都以两个字节的形式返回)。如果传递 0,则使用所提供算法的整个输出。
binary可选。 如果设置为 true,则输出原始二进制数据。默认为 false,输出小写十六进制。

返回值

返回包含派生键的字符串作为小写十六进制,除非 binary 设置为 true,在这种情况下,将返回派生密钥的原始二进制表示形式。

异常

如果算法存在,则引发 E_WARNING未知、迭代参数小于或等于 0、长度小于 0 或盐太长(大于 INT_MAX - 4)。

示例:hash_pbkdf2() 示例

在下面的示例中,生成了一对单独的密钥,适合创建先加密后 HMAC 构造,分别使用 AES-256 和 SHA-256 进行加密和身份验证。

<?php
$password = "myPassword";
$iterations = 100;

//使用生成随机IV
//openssl_random_pseudo_bytes()
//random_bytes() 或其他
//合适的随机源
$salt = openssl_random_pseudo_bytes(16);

//使用hash_pbkdf2函数
$hash = hash_pbkdf2("md5", $password, $salt, 
                    $iterations, 20);
var_dump($hash);

//对于原始二进制文件,$length需要
//减半以获得相同的结果
$hash = hash_pbkdf2("md5", $password, $salt, 
                    $iterations, 10, true);
var_dump(bin2hex($hash));
?> 

上述代码的输出将是:

string(20) "14f6762e90e52a1e05bc"
string(20) "14f6762e90e52a1e05bc"