hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdf生成提供的密钥输入的 HKDF 密钥派生

描述

hash_hkdf(
    字符串 $algo,
    #[\SensitiveParameter] 字符串 $key,
    整数 $length = 0,
    字符串 $info = "",
    字符串 $salt = ""
): 字符串

参数

algo

选定哈希算法的名称(例如 "sha256")。有关支持的算法列表,请参阅 hash_hmac_algos().

注意:

不允许使用非加密哈希函数。

key

输入密钥材料(原始二进制)。不能为空。

length

所需的输出长度(以字节为单位)。不能大于选定哈希函数大小的 255 倍。

如果 length0,输出长度将默认为选定哈希函数的大小。

info

应用程序/上下文特定的信息字符串。

salt

派生期间要使用的盐。

虽然是可选的,但添加随机盐可以显著提高 HKDF 的强度。

返回值

返回包含派生密钥(也称为输出密钥材料 - OKM)的原始二进制表示形式的字符串。

错误/异常

如果 key 为空,algo 未知/非加密,length 小于 0 或过大(大于哈希函数大小的 255 倍),则抛出 ValueError 异常。

变更日志

版本 描述
8.0.0 现在在错误时抛出 ValueError 异常。以前,返回 false 并发出 E_WARNING 消息。

示例

示例 #1 hash_hkdf() 示例

<?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)
?>

上面的示例生成一对独立的密钥,适合使用 AES-256 和 SHA-256 分别进行加密和身份验证来创建加密-然后-HMAC 结构。

参见

添加说明

用户贡献说明 1 条说明

To Top