Node.js 中的 crypto.scrypt() 方法
node.jsjavascriptweb developmentfront end technology
crypto.scrypt() 方法为 scrypt 方法提供了异步实现。scrypt 可以定义为基于密码的密钥派生函数,可保护系统免受暴力攻击并使其无法破解。但脚本函数在计算和内存方面都很昂贵。
语法
crypto.scrypt(password, salt, keylen, [options], [callback])
参数
上述参数描述如下 −
password – 解码条目所需的 scrypt 密码字段。可以是字符串、对象、TypedArray 等。
salt ——该值应尽可能唯一。这主要用于加密数据。建议的最小 salt 长度为 16 字节。
keylen ——该参数定义密钥的长度,应为数字。
options
cost ——这是 CPU 占用每块内存的成本。该值应为 2 的幂大于 1。默认值为 16384。
blockSize ——该参数定义每个块大小的值。默认值为 8。
parallelization ——此参数定义并行化参数。默认值为 1。
N ——此参数是 cost 的别名,可代替 cost 使用。一次只能定义一个。
r ——此参数是 blockSize 的别名,同样一次只能定义一个。
p ——并行化的别名。一次只能定义一个。
maxmem ——这是内存上限值。当 128*N*r > maxmem 时会抛出错误。默认值为 32*1024*1024。
callback – 如果您想要处理错误,则在抛出错误时调用此函数。
示例
创建一个名为 – scrypt.js 的文件并复制以下代码片段。创建文件后,使用以下命令运行此代码,如下例所示 −
node scrypt.js
scrypt.js
// Node.js 程序演示 crypto.scrypt() 方法的流程 // 导入 crypto 模块 var crypto = require('crypto'); // 使用以下参数调用 scrypt() 方法 crypto.scrypt('tutorialspoint', 'asdfghjkl', 32, (err, derivedKey) => { if (err) throw err; // 将派生密钥打印为缓冲区值 console.log("The derived key(1) is:", derivedKey); }); // 使用 cost 选项调用 scrypt() 方法 crypto.scrypt('GeeksforGeeks', 'tfytdx', 128, { N: 512 }, (err, derivedKey) => { if (err) throw err; // 将派生密钥打印为缓冲区值 console.log("The derived key(2) is:", derivedKey); console.log(); });
输出
C:\home
ode>> node scrypt.js The derived key(2) is: <Buffer b3 f8 72 5f 58 df 98 d9 c0 8a ba 0c 2c 50 85 b1 76 de 39 35 40 27 7d 57 f1 6a a1 07 54 dc c9 63 65 32 f2 db 29 95 dc ee 0b 9f e3 d5 0a 9e 3a d0 f6 b4 ... > The derived key(1) is: <Buffer ae 50 38 61 17 f7 11 51 e4 50 63 3c 2a 9c ec f0 46 42 a6 ca 04 78 67 05 c8 8c 0c 69 00 c3 03 7f>
示例
我们再看一个例子。
// Node.js程序演示crypto.scrypt()方法的流程 // 导入crypto模块 var crypto = require('crypto'); // 将salt的值初始化为typedArray const salt = new Uint32Array(7); // 使用带有以下参数的 scrypt() 方法 crypto.scrypt('WelcomeTutorialspoint', salt, 16, (err, derivedKey) => { if (err) throw err; // 以编码字符串格式打印派生密钥 console.log("The derived key(1) is:", derivedKey.toString("ascii")); }); // 将 salt 的值初始化为 DataView const newSalt = new DataView(new ArrayBuffer(5)); // 使用带有 cost 参数的 script() 方法 crypto.scrypt('HelloTutorialspoint', newSalt, 16, { N: 32 }, (err, derivedKey) => { if (err) throw err; // Printing the derived key in encoded string format console.log("The derived key(2) is:", derivedKey.toString("base64")); });
输出
C:\home
ode>> node scrypt.js The derived key(2) is: PBYDRlgayLVGjC8z3YUcSQ== The derived key(1) is: <Uu0allCb,d?,Z5_