PHP
加密 | Cryptography

hash_hkdf

hash_hkdf

(PHP 7 >= 7.1.2)

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

描述

string hash_hkdf ( string $algo , string $ikm [, int $length = 0 [, string $info = '' [, string $salt = '' ]]] )

参数

algo

所选散列算法的名称(即"sha256", "sha512", "haval160,4",等)。有关支持的算法列表,请参见hash_algos()。

注意

ikm

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

length

所需的输出长度(字节)。不能大于所选散列函数大小的255倍。

如果length0,则输出长度将默认为所选散列函数大小。

info

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

salt

在派生过程中使用的Salt。

虽然可选,但加入随机Salt显着提高了HKDF的强度。

返回值

返回包含派生键的原始二进制表示的字符串(也称为输出键控材料 - OKM); 或失败时返回FALSE

错误/异常

如果E_WARNINGikm为空,algo未知/非加密,length小于0或太大(大于散列函数大小的255倍),将会产生An 。

例子

示例#1 hash_hkdf()示例

<?php // Generate a random key, and salt to strengthen it during derivation. $inputKey = random_bytes(32 $salt = random_bytes(16 // Derive a pair of separate keys, using the same input created above. $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结构。