【问题标题】:Node insists these strings aren't sameNode坚持这些字符串不一样
【发布时间】:2017-09-12 04:29:03
【问题描述】:

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

测试:假

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

我检查了 typeof 是字符串,长度值是相同的,所以没有不可见的空格或特殊字符技巧。我已经尝试过 == 和 === 以及 valueOf 来确定。我尝试的任何方法都无法让 :: 标记之间的这两个字符串评估为相等或真。我不明白,我做JS已经有一段时间了。

【问题讨论】:

  • 如果我将它们存储在单独的字符串中,它会返回 true。
  • 这可能与字符串的编码有关吗?查看类似问题的答案:stackoverflow.com/a/10805884/6287910
  • 您确定hash.digest('hex') 提供的正是您需要比较的字符串吗?您是否尝试将其转储到控制台进行调试?
  • 第二个字符串前面的省略号是不是错字...?
  • 我使用 crypt sha 哈希函数以完全相同的方式导出它们,并最终得到相同的字符串,这些字符串使用我粘贴的上述代码进行评估。我也读过字符串的编码类型,我以同样的方式得到它们,所以这不应该是一个问题..如果你复制并粘贴上面的字符串,它们实际上就是它在 :: 之间输出的内容。这是生成它的实际脚本.. 搜索“测试”.. 两个位置都失败:pastebin.com/Qu8bcLng

标签: javascript


【解决方案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')的返回值存储在一个变量中,然后重复使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多