crypto.hkdf(digest, ikm, salt, info, keylen, callback)


HKDF 是一个在 RFC 5869 中定义的简单密钥派生函数。给定的 ikm、salt 和 info 会和 digest 一起用来派生一个 keylen 字节的密钥。可用的摘要算法取决于 OpenSSL 的版本和配置。HKDF 内部使用 HMAC。crypto.getHashes() 列出了哈希 API 可用的算法,但并不是每个列出的算法都一定适合 HMAC 或 HKDF。

🌐 HKDF is a simple key derivation function defined in RFC 5869. The given ikm, salt and info are used with the digest to derive a key of keylen bytes. The available digest algorithms depend on the version and configuration of OpenSSL. HKDF uses HMAC internally. crypto.getHashes() lists algorithms available to the hashing APIs, but not every listed algorithm is necessarily suitable for HMAC or HKDF.

提供的 callback 函数会被两个参数调用:err 和 derivedKey。如果在派生密钥时发生错误,err 会被设置;否则 err 会是 null。成功生成的 derivedKey 会作为 <ArrayBuffer> 传递给回调。如果任何输入参数指定了无效的值或类型,将会抛出错误。

🌐 The supplied callback function is called with two arguments: err and derivedKey. If an error occurs while deriving the key, err will be set; otherwise err will be null. The successfully generated derivedKey will be passed to the callback as an <ArrayBuffer>. An error will be thrown if any of the input arguments specify invalid values or types.

import { Buffer } from 'node:buffer';
const {
  hkdf,
} = await import('node:crypto');

hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => {
  if (err) throw err;
  console.log(Buffer.from(derivedKey).toString('hex'));  // '24156e2...5391653'
});const {
  hkdf,
} = require('node:crypto');
const { Buffer } = require('node:buffer');

hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => {
  if (err) throw err;
  console.log(Buffer.from(derivedKey).toString('hex'));  // '24156e2...5391653'
});