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
。
在哪里,- cost:它是CPU或内存的成本参数。它是一个数字,必须是大于 1 的 2 的幂,默认值为 16384。
- blockSize:它是分配的块大小的参数。它是一个数字,默认值为 8。
- 并行化:它是并行化的参数。它是一个数字,默认值为 1。
- N:它是成本的别名。它是一个数字,只能定义两者之一。
- r: blockSize 的别名。它是一个数字,只能定义两者之一。
- p:是并行化的别名。它是一个数字,只能定义两者之一。
- 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