哈希不同的JSON对象数组会为每个人获得相同的哈希值

时间:2018-10-12 02:46:00

标签: javascript node.js json hash sha256

我正在尝试对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'

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

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

1 个答案:

答案 0 :(得分:2)

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

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字符串。