Hashing array objek JSON yang berbeda mendapatkan nilai hash yang sama untuk semua orang

Saya mencoba melakukan hashing pada array objek JSON tetapi karena alasan tertentu hasd yang dihasilkan tidak berubah dalam beberapa keadaan.

Contoh-contoh ini diuji di nodejs dengan menggunakan paket algoritma hashing sha256.

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

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

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

Seperti yang Anda lihat, semua array memiliki nilai hash yang sama meskipun mereka memiliki properti yang berbeda.

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

Yang ini mempunyai hash yang berbeda karena memiliki dua objek, bukan hanya satu.

Jadi pertanyaan saya adalah untuk memahami apa yang salah dengan tiga array pertama jika saya perlu mendapatkan hash yang berbeda untuk masing-masing array.


person wilson    schedule 12.10.2018    source sumber
comment
akan sangat membantu jika mengetahui paket (atau internal) apa yang menyediakan fungsi sha Anda   -  person rlemon    schedule 12.10.2018
comment
Saya yakin itu hanya melakukan sha('[object object]') atau apa pun representasi string umum dari suatu objek. Seperti mungkin Anda harus mengubah objek Anda menjadi json sebelum melakukan hashing.   -  person Nate    schedule 12.10.2018


Jawaban (1)


Metode sha() Anda mungkin mengharapkan sebuah String dan dengan demikian akan mengetikkan objek Anda ke 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());
}

Jadi jika Anda menginginkan hash dari objek ini, Anda harus mengonversinya menjadi string dengan benar, misalnya dengan menyandikannya ke string JSON terlebih dahulu.

person Kaiido    schedule 12.10.2018