【问题标题】:Hashing different arrays of JSON objects get the same hash value for everyone散列不同的 JSON 对象数组会为每个人获得相同的散列值
【发布时间】:2019-03-17 05:00:39
【问题描述】:

我正在尝试散列 JSON 对象数组,但由于某种原因,生成的 hasd 在某些情况下不会改变。

这些示例使用 sha256 哈希算法包在 nodejs 中进行了测试。

arr1 = [{a: 1}];
sha(arr1);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

arr2 = [{a: 1, b:2}]
sha(arr2);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

arr3 = [{a: 1111111111111}];
sha(arr3);
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d'

正如你所见,所有数组都具有相同的哈希生成值,即使它们具有不同的属性。

arr4 = [{a: 1}, {b: 2}];
sha(arr4);
'96a296d224f285c67bee93c30f8a309157f0daa35dc5b87e410b78630a09cfc7'

这个有一个不同的哈希,因为它有两个对象,而不是只有一个。

所以我的问题是如果我需要为每个数组获取不同的哈希值,那么前三个数组有什么问题。

【问题讨论】:

  • 了解什么包(或内部)提供您的 sha 功能会很有帮助
  • 我敢打赌它实际上只是在做 sha('[object object]') 或任何对象的通用字符串表示。就像也许你应该在散列之前把你的对象变成 json。

标签: javascript node.js json hash sha256


【解决方案1】:

您的sha() 方法可能需要一个字符串,因此会将您的对象类型转换为字符串:

arr1 = [{a: 1}];
sha(arr1);

arr2 = [{a: 1, b:2}]
sha(arr2);

arr3 = [{a: 1111111111111}];
sha(arr3);

arr4 = [{a: 1}, {b: 2}];
sha(arr4);

function sha(v) {
  console.log(v.toString());
}

因此,如果您想要这些对象的哈希值,则必须将它们正确转换为字符串,例如先将它们编码为 JSON 字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2015-06-25
    相关资源
    最近更新 更多