Node.js crypto.timingSafeEqual() 函数
Node.js 是一个跨平台的开源后端 JavaScript 运行环境,使用V8引擎在浏览器之外执行 JavaScript 代码。Node.js 允许开发者使用 JavaScript 创建命令行工具和服务器端脚本,在将页面发送给用户浏览器之前在服务器上运行脚本。加密功能通过 crypto 模块提供,其中包括 OpenSSL 的散列、HMAC、加密、解码、签名和验证方法的包装器。
crypto.timingSafeEqual() 函数用于判断两个变量是否相等,而不会暴露出可能使攻击者猜测其中一个值的计时信息。它采用了一个常数时间的算法。
语法:
crypto.timingSafeEqual(a, b)
参数:
- a: 它是一个必须是Buffer、TypedArray或DataView类型的变量。
- b: 它是一个必须是Buffer、TypedArray或DataView类型的变量,并且必须与 a 的长度相同。
返回值: 如果a等于b,则为true,否则为false。
示例1:
import crypto from 'crypto';
const a = Buffer.alloc(5, 'b');
const b = Buffer.alloc(5, 'b');
let res = crypto.timingSafeEqual(a, b);
console.log(res);
输出:
true
示例2:
import crypto from 'crypto';
const a = new Int8Array(8);
const b = new Int8Array(a);
a[0] = 2;
b[1] = 5;
let res = crypto.timingSafeEqual(a, b);
console.log(res);
输出:
false
参考: https://nodejs.org/dist/latest-v12.x/docs/api/crypto.html#crypto_crypto_timingsafeequal_a_b