📜  Node.js crypto.pbkdf2() 方法

📅  最后修改于: 2022-05-13 01:56:48.637000             🧑  作者: Mango

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