Node.js 中的 crypto.scrypt() 方法
该方法为scrypt方法提供了异步实现。scrypt可以定义为基于密码的密钥派生函数,它可以保护系统免受蛮力攻击并使其无法获得奖励。但是脚本函数在计算和内存方面都很昂贵。crypto.scrypt()
语法
crypto.scrypt(password, salt, keylen, [options], [callback])
参数
上述参数描述如下-
密码 –解码条目所需的scrypt的密码字段。它可以是字符串、对象、TypedArray等。
salt –该值应尽可能唯一。这主要用于加密数据。盐的最小建议长度为16字节。
keylen –该参数定义了密钥的长度,应该是一个数字。
选项
cost -这是每个内存占用的CPU成本。此值应为大于1的2的幂。默认值为16384。
blockSize –此参数定义了每个块大小的值。默认值为8。
并行化 ——这个参数定义了并行化参数。默认值为1。
N –此参数是成本的别名,可以代替它使用。一次只能定义一个。
r –此参数是blockSize的别名,同样一次只能定义一个。
p –并行化的别名。只能定义一个。
maxmem -这是内存上限值。当128*N*r>maxmem时抛出错误。默认值为32*1024*1024。
回调-如果您想处理它,则在抛出错误时调用 此函数。
示例
创建一个具有名称的文件-scrypt.js并复制以下代码片段。创建文件后,使用以下命令运行此代码,如下例所示-
node scrypt.js
scrypt.js
//Node.jsprogram演示了crypto.scrypt()方法的流程 //导入加密模块 var crypto = require('crypto'); //使用以下参数调用scrypt()方法 crypto.scrypt('nhooo', '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\node>> node scrypt.js The derived key(2) is:The derived key(1) is:
示例
让我们再看一个例子。
//Node.jsprogram演示了crypto.scrypt()方法的流程 //导入加密模块 var crypto = require('crypto'); //将salt的值初始化为typedArray const salt = new Uint32Array(7); //使用带有以下参数的scrypt()方法 crypto.scrypt('WelcomeNhooo', 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)); //使用带有成本参数的script()方法 crypto.scrypt('HelloNhooo', newSalt, 16, { N: 32 }, (err, derivedKey) => { if (err) throw err; //以编码字符串格式打印派生密钥 console.log("The derived key(2) is:", derivedKey.toString("base64")); });输出结果
C:\home\node>> node scrypt.js The derived key(2) is: PBYDRlgayLVGjC8z3YUcSQ== The derived key(1) is: