📜  Node.js crypto.scrypt() 方法

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

Node.js crypto.scrypt() 方法

crypto.scrypt() 方法是加密模块的内置应用程序编程接口,用于启用异步 scrypt 的实现。其中, scrypt是一个基于密码的密钥派生函数。它的目的是在计算上加上内存方面的成本很高。因此,蛮力攻击是不成功的。

句法:

crypto.scrypt( password, salt, keylen, options, callback )

参数:此方法接受上面提到的五个参数,如下所述:

  • 密码:它可以保存字符串、 Buffer 、 TypedArray 或 DataView 类型的数据。
  • salt:它保存字符串、Buffer、TypedArray 或 DataView 类型的数据。它必须尽可能独特。此外,建议盐应该是随机的,并且长度至少为 16 个字节。
  • keylen:是密钥的长度,必须是数字。
  • options:它是Object类型,它有七个参数,即cost, blockSize, parallelization, N, r, p,maxmem
    在哪里,
    1. cost:它是CPU或内存的成本参数。它是一个数字,必须是大于 1 的 2 的幂,默认值为 16384。
    2. blockSize:它是分配的块大小的参数。它是一个数字,默认值为 8。
    3. 并行化:它是并行化的参数。它是一个数字,默认值为 1。
    4. N:它是成本的别名。它是一个数字,只能定义两者之一。
    5. r: blockSize 的别名。它是一个数字,只能定义两者之一。
    6. p:是并行化的别名。它是一个数字,只能定义两者之一。
    7. maxmem:它是要使用的内存的上限。它是一个数字,当128 * N * r (近似值)大于 maxmem 时会发生错误。默认值为 (32 * 1024 * 1024)。
  • callback它是一个带有两个参数的函数,即 err 和派生键。

返回值:它返回一个缓冲区。

下面的例子说明了在 Node.js 中crypto.scrypt() 方法的使用:

示例 1:

// Node.js program to demonstrate the
// crypto.scrypt() method
  
// Including crypto module
var crypto = require('crypto');
  
// Calling scrypt method with some of its parameter
crypto.scrypt('GfG', 'ffdgsg', 32, (err, derivedKey) => {
  
  if (err) throw err;
  
  // Prints derived key as buffer
  console.log("The derived key1 is :", derivedKey);
});
  
// Calling scrypt method with the parameter N
crypto.scrypt('GeeksforGeeks', 'tfytdx', 128,
           { N: 512 }, (err, derivedKey) => {
  
  if (err) throw err;
  
  // Prints derived key as buffer
  console.log("The derived key2 is :", derivedKey);
  console.log();
});

输出:

The derived key2 is : 

The derived key1 is : 

示例 2:

// Node.js program to demonstrate the
// crypto.scrypt() method
  
// Including crypto module
var crypto = require('crypto');
  
// Defining salt as typed array
const x = new Uint32Array(7);
  
// Calling scrypt method with some of its parameter
crypto.scrypt('yytunnd', x,  16, (err, derivedKey) => {
  
  if (err) throw err;
  
  // Prints derived key which is encoded
  console.log("The derived key1 is :",
            derivedKey.toString("ascii"));
});
  
// Defining salt as data view
const y = new DataView(new ArrayBuffer(5));
  
// Calling scrypt method with the parameter N
crypto.scrypt('oksjdjdn', y, 16, { N: 32 },
                (err, derivedKey) => {
  
  if (err) throw err;
  
  // Prints derived key after encoding
  console.log("The derived key2 is :",
            derivedKey.toString("base64"));
  console.log();
});

输出:

The derived key2 is : 6Gu0JKHDSHs0tkTuGYuQ7A==
The derived key1 is : G"@&H 
                           pVCD3                               
                                X%

参考: https://nodejs.org/api/crypto.html#crypto_crypto_scrypt_password_salt_keylen_options_callback