Хеширование разных массивов объектов JSON получает одинаковое значение хеша для всех - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь хэшировать массив объектов JSON, но по некоторым причинам сгенерированный hasd не меняется в некоторых обстоятельствах.

Эти примеры были протестированы в nodejs с использованием пакета алгоритма хеширования sha256.

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'

Этот хеш имеет другой хэш, потому что у него есть два объекта, а не толькоone.

Таким образом, мой вопрос должен понять, что не так с первыми тремя массивами, если мне нужно получить различный хэш каждого из них.

1 Ответ

0 голосов
/ 12 октября 2018

Ваш 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.

...