Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个基本的JavaScript字符串比较问题_Javascript_Node.js_String - Fatal编程技术网

一个基本的JavaScript字符串比较问题

一个基本的JavaScript字符串比较问题,javascript,node.js,string,Javascript,Node.js,String,我在使用Node.js及其内置的crypto模块进行字符串比较时遇到了一个问题(在对传入负载进行签名检查的上下文中)。考虑这个代码示例: console.log(` SIG:'${signature}'-type:${typeof signature} 哈希:'${hmac.digest('hex')}'-type:${typeof(hmac.digest('hex'))} 等于:${signature==hmac.digest('hex')} `); 这是我在控制台中看到的: SIG :

我在使用Node.js及其内置的
crypto
模块进行字符串比较时遇到了一个问题(在对传入负载进行签名检查的上下文中)。考虑这个代码示例:

console.log(`
SIG:'${signature}'-type:${typeof signature}
哈希:'${hmac.digest('hex')}'-type:${typeof(hmac.digest('hex'))}
等于:${signature==hmac.digest('hex')}
`);
这是我在控制台中看到的:

SIG   : '1406f5bfc078fa6a7feb5eca9c091a19c96926f6110272c04cd4cbd712be60c4' - type: string
HASH  : '1406f5bfc078fa6a7feb5eca9c091a19c96926f6110272c04cd4cbd712be60c4' - type: string
EQUALS: false
因此,正如预期的那样,两者都是字符串,并且都是相同的字符串。但为什么他们不平等呢?我束手无策

顺便说一下,当使用
==
时,作为比较的结果,我还得到了
false

有关信息和h/t:我使用此脚本作为基础:

尝试使用

var EQUALS = SIG.localeCompare(HASH);
尝试使用

var EQUALS = SIG.localeCompare(HASH);

出现此问题是因为您调用了两次
hmac.digest()
,第二次它返回空字符串:

尝试将结果保存在变量中,然后比较:

const result=hmac.digest('hex'))
console.log(`
SIG:'${signature}'-type:${typeof signature}
哈希:'${result}'-type:${typeof(result)}
等于:${signature==result}
`);

出现此问题是因为您调用了
hmac.digest()
两次,第二次它返回空字符串:

尝试将结果保存在变量中,然后比较:

const result=hmac.digest('hex'))
console.log(`
SIG:'${signature}'-type:${typeof signature}
哈希:'${result}'-type:${typeof(result)}
等于:${signature==result}
`);

您是否尝试在运行时调试?@Deniz您所说的在运行时调试是什么意思?为了获得更好的可视化表示,请执行
${JSON.stringify(signature)}
${JSON.stringify(hmac.digest('hex'))}
。它可能会显示一些隐藏的字符…比较长度。也许有一些看不见的字符,比如@trincot saidNice idea来检查
长度
hmac.digest('hex')
返回
0
!当我把它的输出分配给一个变量时,它会按预期工作。不知道为什么,但它起作用了。你试过在运行时调试吗?@Deniz你说在运行时调试是什么意思?为了更好的视觉表现,请执行
${JSON.stringify(signature)}
${JSON.stringify(hmac.digest('hex'))}
。它可能会显示一些隐藏的字符…比较长度。也许有一些看不见的字符,比如@trincot saidNice idea来检查
长度
hmac.digest('hex')
返回
0
!当我把它的输出分配给一个变量时,它会按预期工作。不知道为什么,但它起作用了。确切地说,OP的代码段中定义了
SIG
在哪里?SIG只是一个字符串。语法高亮显示失败了,OP的代码段中定义了
SIG
,确切地说,SIG只是一个字符串。语法高亮显示失败了,就是这个!感谢您澄清
hmac.digest('hex')
的重复使用。就是这个!感谢您澄清
hmac.digest('hex')
的重复使用。