Node.js 中的 crypto.scrypt() 方法
crypto.scrypt() 方法提供了一个异步的 scrypt 方法实现。scrypt 可以定义为一个基于密码的密钥派生函数,它可以保护系统免受暴力破解攻击,并使其难以攻破。但是,scrypt 函数在计算和内存方面都比较昂贵。
语法
crypto.scrypt(password, salt, keylen, [options], [callback])
参数
上述参数描述如下:
password – scrypt 解码条目所需的密码字段。它可以是字符串、对象、TypedArray 等。
salt – 此值应尽可能唯一。这主要用于加密数据。建议盐的最小长度为 16 字节。
keylen – 此参数定义密钥的长度,应为数字。
选项
cost – 这是每个内存占用所消耗的 CPU 成本。此值应大于 1 的 2 的幂。默认值为 16384。
blockSize – 此参数定义每个块的大小值。默认值为 8。
parallelization – 此参数定义并行化参数。默认值为 1。
N – 此参数是 cost 的别名,可以替代它使用。一次只能定义一个。
r – 此参数是 blockSize 的别名,同样一次只能定义一个。
p – parallelization 的别名。一次只能定义一个。
maxmem – 这是内存上限值。当 128*N*r > maxmem 时会抛出错误。默认值为 32*1024*1024。
callback – 如果要处理错误,则在抛出错误时调用此函数。
示例
创建一个名为 scrypt.js 的文件并复制下面的代码片段。创建文件后,使用以下命令运行此代码,如下例所示:
node scrypt.js
scrypt.js
// Node.js program to demonstrate the flow of crypto.scrypt() method // Importing the crypto module var crypto = require('crypto'); // Calling the scrypt() method with the below parameters crypto.scrypt('tutorialspoint', 'asdfghjkl', 32, (err, derivedKey) => { if (err) throw err; // Prints the derived key as a buffer value console.log("The derived key(1) is:", derivedKey); }); // Calling the scrypt() method with the cost option crypto.scrypt('GeeksforGeeks', 'tfytdx', 128, { N: 512 }, (err, derivedKey) => { if (err) throw err; // Prints the derived key as a buffer value 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 program to demonstrate the flow of crypto.scrypt() method // Importing the crypto module var crypto = require('crypto'); // Initializing the value of salt as a typedArray const salt = new Uint32Array(7); // Using the scrypt() method with below parameters crypto.scrypt('WelcomeTutorialspoint', salt, 16, (err, derivedKey) => { if (err) throw err; // Printing the derived key in encoded string format console.log("The derived key(1) is:", derivedKey.toString("ascii")); }); // Initialising the value of salt as a DataView const newSalt = new DataView(new ArrayBuffer(5)); // Using the script() method with cost parameter 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_
广告