Node坚持认为这些字符串不相同

时间:2017-04-16 11:00:23

标签: javascript

cookie比较 ::cfe3ca5d662b0252292d4da9e486430fded7311233aa31354997d626ac1cb98caacb16a34b458ab7bb60a9310790524e1f7ef090dfbcfa424e5a03632c1d89eb::.....::cfe3ca5d662b0252292d4da9e486430fded7311233aa31354997d626ac1cb98caacb16a34b458ab7bb60a9310790524e1f7ef090dfbcfa424e5a03632c1d89eb::

test:false

console.log('test: ' + ( hash.digest('hex') === v ));

我检查过typeof是字符串和长度值是否相同所以没有不可见的空格或特殊字符技巧。我已经尝试了==和===以及valueOf以确定。我没有尝试可以在:: tokens之间获得这两个字符串来评估为相等或真。我没有得到它,而且我已经做了很长一段时间的JS。

1 个答案:

答案 0 :(得分:1)

https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding

  

调用Hash方法后,hash.digest()对象无法再次使用。多次调用将导致抛出错误。

你称之为三次次:

console.log('cookie compare::' + hash.digest('hex').valueOf() + '::.. to        ...::' + v + '::' );
console.log('test: ' +  ( hash.digest('hex') === v ));
if ( hash.digest('hex') === v ) { console.log( '---- OK ----'); return true; }

在这种情况下,不会抛出错误,但是第二次调用hash.digest()时它会返回一个空字符串(至少对我而言),因此它与v不匹配。

解决方案:将hash.digest('hex')的返回值存储在变量中并重复使用。