我正在尝试调试其他程序员留给我维护的一些代码。我刚刚尝试从node.js 5升级到node.js 8,我的数据库查询是针对某些请求返回的,但没有找到关键错误

我们正在使用ouchbase数据库,并且为了安全起见,我们的文档密钥已“加密”。因此,我们可能会有一个以“[email protected]”开头的密钥,但是我们使用以下方法对其进行加密:

function _GetScrambledKey(dbKey)
{
    //select encryption key based on db key content
    var eKeyIndex = CalculateEncryptionKeyIndex(dbKey, eKeys.length);
    var sha = CalculateSHA512(dbKey + eKeyIndex);
    return sha;
}

function CalculateEncryptionKeyIndex(str, max)
{
    var hashBuf = CalculateSHA1(str);
    var count = 0;
    for (var i = 0; i < hashBuf.length; i++)
    {
        count += hashBuf[i];
        count = count % max;
    }
    return count;
}

然后,我们查询Couchbase以获取文档
cb.get("ECB_"+encryptedKey, opts, callback);

在node5中,此方法有效,但在node8中,我们得到了一些文档返回正常,而另一些返回丢失的文档。我将"ECB_"+encryptedKey输出为一个int数组,结果让我更加困惑。它们在节点5和节点8上有所不同,但仅在数组中间一个字符处。

在两个版本上将cryptokey输出为int数组都显示此信息
188,106,14,227,211,70,94,97,63,130,78,246,155,65,6,148,62,215,47,230,211,109,35,99,21,60,178,74,195,13,233,253,187,142,213,213,104,58,168,60,225,148,25,101,155,91,122,77,2,99,102,235,26,71,157,99,6,47,162,152,58,181,21,175
然后以相同的方式输出连接的字符串,显示的结果略有不同

这是node8的输出Node8 key: 69,67,66,95,65533,106,14,65533,65533,70,94,97,63,65533,78,65533,65533,65,6,65533,62,65533,47,65533,65533,109,35,99,21,60,65533,74,65533,13,65533,65533,65533,65533,65533,65533,104,58,65533,60,65533,25,101,65533,91,122,77,2,99,102,65533,26,71,65533,99,6,47,65533,65533,58,65533,21,65533
这是node5的输出Node5 key: 69,67,66,95,65533,106,14,65533,65533,70,94,97,63,65533,78,65533,65533,65,6,65533,62,65533,47,65533,65533,109,35,99,21,60,65533,74,65533,13,65533,65533,65533,65533,65533,65533,104,58,65533,60,65533,65533,25,101,65533,91,122,77,2,99,102,65533,26,71,65533,99,6,47,65533,65533,58,65533,21,65533
我必须通过差异工具运行它才能看到差异
javascript - node.js更改串联吗?-LMLPHP
与原始的预先添加数组进行比较,看起来好像225刚刚被放在了node8中。 225重要吗?除非是错误,否则我不知道怎么可能。有人有什么想法吗?

最佳答案

看起来这是v8 5.5 https://github.com/nodejs/node/issues/21278中的更改

关于javascript - node.js更改串联吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49555246/

10-10 04:00