Node.js crypto.pbkdf2() 方法
crypto.pbkdf2() 方法提供了一个异步的基于密码的密钥派生函数2即 (PBKDF2) 实现。此外,实现了由摘要定义的特定 HMAC 摘要算法,以从所述密码、盐和迭代中导出所需字节长度 (keylen) 的密钥。
句法:
crypto.pbkdf2( password, salt, iterations, keylen, digest, callback )
参数:此方法接受上面提到的六个参数,如下所述:
- 密码:它可以保存字符串、 Buffer 、 TypedArray 或 DataView类型的数据。
- salt:它必须尽可能独特。但是,建议盐是任意的,并且在任何情况下都至少有 16 个字节长。它的类型为字符串、 Buffer、 TypedArray 或 DataView 。
- 迭代次数:它必须是一个数字,并且应该设置得尽可能高。因此,迭代次数越多,派生密钥就越安全,但在这种情况下,完成所需的时间会更长。它是数字类型。
- keylen:需要字节长度的key,类型为number。
- 摘要:是字符串类型的摘要算法。
- 回调:它是一个有两个参数的函数,即err 和 derivedKey 。
返回类型:它返回派生的基于密码的密钥。
下面的示例说明了在 Node.js 中使用crypto.pbkdf2() 方法:
示例 1:
// Node.js program to demonstrate the
// crypto.pbkdf2() method
// Including crypto module
const crypto = require('crypto');
// Implementing pbkdf2 with all its parameters
crypto.pbkdf2('secret', 'salt', 100000, 64,
'sha512', (err, derivedKey) => {
if (err) throw err;
// Prints derivedKey
console.log(derivedKey.toString('hex'));
});
输出:
3745e482c6e0ade35da10139e797157f4a5da669dad7d5da88ef87e
47471cc47ed941c7ad618e827304f083f8707f12b7cfdd5f489b782
f10cc269e3c08d59ae
示例 2:
// Node.js program to demonstrate the
// crypto.pbkdf2() method
// Including crypto module
const crypto = require('crypto');
// Implementing pbkdf2 with all its parameters
// but digest is null
crypto.pbkdf2('secret', 'salt', 677, 6,
null, (err, derivedKey) => {
if (err)
{
console.log(err);
}
else
{
// Prints derivedKey without encoding
console.log(derivedKey);
}
});
输出:这里,一个缓冲区被返回,因为派生键没有更改为字符串。
Buffer 71 1e 7b 7b 9b 53
参考: https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback