PHP hash_hkdf() 函数用于使用 HMAC 方法生成带密钥的哈希值。
HKDF 是使用"md5"、"sha256"等 HMAC 算法、输入密钥和盐密钥派生的简单密钥。
HMAC 代表基于哈希的消息验证代码。它利用"md5"、"sha256"等加密哈希函数和密钥来返回给定数据的消息摘要哈希。
语法
hash_hkdf(algo, key, length, info, salt)
参数
algo |
|
key | 必填。 指定输入密钥材料(原始二进制)。不能为空。 |
length | 可选。 指定所需的输出长度(以字节为单位)。它不能大于所选哈希函数大小的 255 倍。如果长度为 0,则输出长度将默认为所选哈希函数大小。 |
info | 可选。 指定应用程序/上下文特定的信息字符串。 |
salt | 可选。 指定在推导过程中使用的盐。添加随机盐显着提高了 HKDF 的强度。 |
返回值
返回包含派生密钥的原始二进制表示形式的字符串(也称为输出密钥材料 - OKM),或失败时返回 false。
异常
如果密钥为空,则引发 E_WARNING,算法未知/非- 加密,长度小于 0 或太大(大于哈希函数大小的 255 倍)。
示例:hash_hkdf() 示例
在下面的示例中,a生成一对单独的密钥,适合创建先加密后 HMAC 构造,分别使用 AES-256 和 SHA-256 进行加密和身份验证。
<?php
//生成随机密钥和盐
//在推导过程中加强它
$inputKey = random_bytes(32);
$salt = random_bytes(16);
//导出一对单独的
//使用相同输入的按键
$encryptionKey = hash_hkdf('sha256', $inputKey, 32,
'aes-256-encryption', $salt);
$authenticationKey = hash_hkdf('sha256', $inputKey, 32,
'sha-256-authentication', $salt);
var_dump($encryptionKey !== $authenticationKey);
?>
上述代码的输出将是:
bool(true)