我正在尝试对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'
此对象具有不同的哈希值,因为它有两个对象,而不是只有一个。
所以我的问题是要了解如果我需要为每个数组获取不同的哈希,那么前三个数组有什么问题。
答案 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字符串。