Saya memiliki 2 dokumen excel dan saya ingin memeriksa apakah keduanya persis sama, terlepas dari nama file.
Sebagai contoh, file dipanggil fileone.xls
dan filetwo.xls
. Terlepas dari nama file, isinya dianggap identik tetapi inilah yang ingin saya periksa.
Saya telah mencari cara untuk meninjau hal ini dan tanpa menginstal banyak plugin. Tampaknya tidak ada jalan lurus ke depan.
Saya sudah mencoba menghasilkan hash MD5 untuk kedua file. Ketika hash identik, apakah ini berarti bahwa isi file 1: 1 sama?
cmp
di Unix ataufc
(membandingkan file) pada Windows.diff -s file1 file2
jika dikatakan mereka identik, mereka identik (sebenarnya membandingkan file byte-per-byte sehingga bahkan tabrakan hash dikecualikan). checksum digunakan ketika Anda hanya memiliki satu hash dan item yang dianggap identik dengan pencetus hash itu.Jawaban:
Semua file adalah kumpulan byte (nilai 0-255). Jika dua file hash MD5 cocok, kedua koleksi byte tersebut sangat mungkin sama persis (urutan yang sama, nilai yang sama).
Ada kemungkinan sangat kecil bahwa dua file dapat menghasilkan MD5 yang sama, yang merupakan hash 128 bit. Probabilitasnya adalah:
Hash dimaksudkan untuk bekerja dalam "satu arah saja" - yaitu Anda mengambil koleksi byte dan mendapatkan hash, tetapi Anda tidak dapat mengambil hash dan mendapatkan kembali koleksi byte.
Kriptografi tergantung pada ini (itu adalah satu cara dua hal dapat dibandingkan tanpa mengetahui hal-hal itu.)
Sekitar tahun 2005, metode ditemukan untuk
mengambil hash MD5 dan membuat data yang cocok dengan hashmembuat dua dokumen yang memiliki hash MD5 yang sama ( collision attack ). Lihat komentar @ user2357112 di bawah ini. Ini berarti penyerang dapat membuat dua executable, misalnya, yang memiliki MD5 yang sama, dan jika Anda bergantung pada MD5 untuk menentukan mana yang harus dipercaya, Anda akan tertipu.Dengan demikian MD5 tidak boleh digunakan untuk kriptografi atau keamanan. Misalnya, menerbitkan MD5 di situs unduhan untuk memastikan integritas unduhan, misalnya. Bergantung pada hash MD5 Anda tidak membuat sendiri untuk memverifikasi file atau konten data adalah apa yang ingin Anda hindari.
Jika Anda menghasilkan milik Anda sendiri, Anda tahu Anda tidak jahat pada diri sendiri (semoga). Jadi untuk penggunaan Anda, tidak apa-apa, tetapi jika Anda ingin orang lain dapat mereproduksinya, dan Anda ingin mempublikasikan hash MD5 secara publik, hash yang lebih baik harus digunakan.
Perhatikan bahwa dua file Excel mungkin berisi nilai yang sama di baris dan kolom yang sama, tetapi untuk bytestream file menjadi sangat berbeda karena perbedaan format, gaya, pengaturan, dll.
Jika Anda ingin membandingkan data dalam file, ekspor ke CSV dengan baris dan kolom yang sama terlebih dahulu, untuk menghapus semua pemformatan, lalu hash atau bandingkan CSV.
sumber
diff
utilitas yang terhormat atau serupa untuk benar-benar mengkonfirmasi file yang byte-for-byte identik, daripada hanya memiliki hash yang sama.diff -s
untuk memeriksa apakah CSV itu identik. Bahkan Anda dapatdiff -s
bahkan file excel: jikadiff
mengatakan mereka identik Anda tidak perlu pergi ke perbandingan CSV.Dalam praktiknya, ya, hash kriptografi identik berarti file-nya sama, selama file-file itu tidak dibuat oleh penyerang atau entitas jahat lainnya. Peluang tabrakan acak dengan fungsi hash kriptografi yang dirancang dengan baik sangat kecil sehingga dapat diabaikan dalam praktik dan tanpa adanya penyerang aktif.
Secara umum, bagaimanapun, tidak, kita tidak dapat mengatakan bahwa dua file arbitrer yang memiliki hash yang sama jelas berarti bahwa mereka identik.
Cara fungsi hash kriptografi bekerja adalah dengan mengambil input panjang arbitrer, dan menampilkan nilai panjang tetap yang dihitung dari input. Beberapa fungsi hash memiliki panjang output ganda untuk dipilih, tetapi outputnya sampai batas tertentu memiliki nilai panjang tetap. Nilai ini akan mencapai beberapa lusin byte; algoritma hash dengan nilai output terpanjang yang umum digunakan saat ini memiliki output 512-bit, dan output 512-bit adalah 64 byte.
Jika input ke fungsi hash lebih panjang dari output fungsi hash, beberapa kesetiaan harus dihilangkan untuk membuat input sesuai dengan output. Akibatnya, harus ada beberapa input dengan panjang lebih besar dari panjang output, yang menghasilkan output yang sama.
Mari kita ambil pekerja keras saat ini, SHA-256, sebagai contoh. Ini menghasilkan hash 256 bit, atau 32 byte. Jika Anda memiliki dua file yang panjangnya masing-masing tepat 32 byte, tetapi berbeda, ini harus (dengan asumsi tidak ada cacat dalam algoritma) hash ke nilai yang berbeda, tidak peduli isi file; dalam istilah matematika, hash adalah fungsi pemetaan 2 256 ruang input ke sebuah 2 256 ruang output, yang harus mungkin untuk melakukannya tanpa tabrakan. Namun, jika Anda memiliki dua file yang masing-masing berukuran 33 byte, harus ada beberapa kombinasi input yang memberikan nilai hash output 32-byte yang sama untuk kedua file tersebut, karena kami sekarang memetakan ruang input 2 264 ke ruang 2 256ruang keluaran; di sini, kita dapat dengan mudah melihat bahwa harus, rata-rata, ada 2 8 input untuk setiap output. Ambillah ini lebih lanjut, dan dengan file 64-byte harus ada 2 256 input untuk setiap output tunggal!
Fungsi hash kriptografi dirancang sedemikian rupa sehingga sulit secara komposisional untuk menyusun input yang memberikan output tertentu, atau menulis dua input yang memberikan output yang sama. Ini dikenal sebagai resistensi serangan preimage atau resistensi serangan tubrukan . Bukan tidak mungkin menemukan tabrakan ini; itu hanya dimaksudkan untuk menjadi sangat, sangat, sangat, sangat sulit. (Sedikit kasus khusus dari serangan tabrakan adalah serangan ulang tahun .)
Beberapa algoritma lebih baik daripada yang lain dalam melawan penyerang. MD5 umumnya dianggap benar-benar rusak akhir-akhir ini, tetapi terakhir saya melihat, itu masih memiliki resistensi preimage pertama yang cukup bagus . SHA-1 juga rusak secara efektif; serangan preimage telah diperlihatkan, tetapi membutuhkan kondisi khusus, meskipun tidak ada alasan untuk percaya bahwa itu akan terjadi tanpa batas waktu; seperti kata pepatah, serangan selalu menjadi lebih baik, mereka tidak pernah menjadi lebih buruk. SHA-256/384/512 saat ini masih diyakini aman untuk sebagian besar tujuan. Namun , jika Anda hanya tertarik untuk melihat apakah dua yang dibuat tidak jahat, validfile adalah sama, maka semua ini harus memadai, karena ruang input sudah cukup dibatasi sehingga Anda akan lebih tertarik pada tabrakan acak. Jika Anda memiliki alasan untuk meyakini bahwa file tersebut dibuat dengan cara jahat, maka Anda harus setidaknya menggunakan fungsi hash kriptografi yang saat ini diyakini aman, yang menempatkan bilah bawah di SHA-256.
Preimage pertama adalah menemukan input yang menghasilkan nilai hash output spesifik; preimage kedua adalah menemukan satu input yang memberikan output yang sama dengan input lain yang ditentukan; tabrakan adalah untuk menemukan dua input yang menghasilkan output yang sama, tanpa memperhatikan apa itu dan kadang-kadang tanpa memperhatikan apa input tersebut.
Semua yang dikatakan, penting untuk diingat bahwa file mungkin memiliki representasi data yang sangat berbeda dan masih menampilkan persis sama. Jadi mereka dapat tampak sama meskipun hash kriptografisnya tidak cocok, tetapi jika hash cocok maka mereka sangat mungkin tampak sama.
sumber
Ini adalah permainan probabilitas ... hash mampu mewakili sejumlah nilai hingga.
Jika kita menganggap algoritma hashing 8-bit hipotetis (dan sangat lemah), maka ini dapat mewakili 256 nilai yang berbeda. Saat Anda mulai menjalankan file melalui algoritme, Anda akan mulai mengeluarkan hash ... tetapi tidak lama kemudian Anda akan mulai melihat " tabrakan hash ". Ini berarti bahwa dua file berbeda dimasukkan ke dalam algoritma, dan menghasilkan nilai hash yang sama dengan outputnya. Jelas di sini, hash tidak cukup kuat, dan kami tidak dapat menyatakan bahwa " file dengan hash yang cocok memiliki konten yang sama ".
Memperluas ukuran hash, dan menggunakan algoritma hashing kriptografi yang lebih kuat dapat secara signifikan membantu mengurangi tabrakan, dan meningkatkan kepercayaan kami bahwa dua file dengan hash yang sama memiliki konten yang sama.
Ini mengatakan, kami tidak pernah dapat mencapai kepastian 100% - kami tidak pernah dapat mengklaim dengan pasti bahwa dua file dengan hash yang sama benar-benar memiliki konten yang sama.
Dalam sebagian besar / banyak situasi ini baik-baik saja, dan membandingkan hash " cukup baik ", tetapi ini tergantung pada model ancaman Anda.
Pada akhirnya, jika Anda perlu meningkatkan level kepastian, maka saya akan merekomendasikan Anda melakukan hal berikut:
Jika Anda perlu 100% yakin, maka mulailah dengan hash, tetapi jika hash cocok, ikuti dengan perbandingan byte-by-byte dari kedua file.
Selain itu, seperti yang ditunjukkan oleh orang lain ... kompleksitas dokumen yang dihasilkan oleh aplikasi seperti Word dan Excel berarti teks, angka, tata letak yang terlihat bisa sama, tetapi data yang disimpan dalam file bisa berbeda.
Excel sangat buruk dalam hal ini - hanya dengan membuka spreadsheet, menyimpannya ( tidak melakukan apa-apa ) dapat menghasilkan file baru, dengan konten yang berbeda.
sumber
Jika dua file memiliki hash MD5 yang sama, dan keduanya belum dibuat secara khusus, maka keduanya identik. Betapa sulitnya untuk membuat file dengan hash MD5 yang sama tergantung pada format file, saya tidak tahu betapa mudahnya dengan file Excel.
Jadi, jika Anda memiliki file Anda sendiri yang hanya berbaring dan ingin mencari duplikat, MD5 aman. Jika Anda menulis salah satu file, dan file lainnya asal meragukan, MD5 masih aman (satu-satunya cara untuk mendapatkan file yang berbeda dengan MD5 checksum yang sama adalah dengan membuat kedua file). Jika seseorang yang Anda tidak percaya mengirimi Anda proposal anggaran, dan kemudian mengirimkan file lain yang mereka klaim adalah sama, maka MD5 mungkin tidak cukup.
Untuk menghindari risiko apa pun, gunakan SHA-256 atau SHA-512 alih-alih MD5. Jika dua file memiliki hash SHA-256 yang sama, maka mereka identik. Hal yang sama berlaku untuk SHA-512. (Ada kemungkinan teoretis bahwa mereka bisa berbeda, tetapi kemungkinan ini terjadi secara tidak sengaja jauh lebih kecil daripada kemungkinan komputer Anda membalik sedikit selama verifikasi daripada yang tidak relevan. Adapun seseorang dengan sengaja membuat dua file dengan hash yang sama, tidak ada yang tahu bagaimana melakukan ini untuk SHA-256 atau SHA-512.)
Jika dua file Excel memiliki hash yang berbeda, maka mereka berbeda, tetapi tidak ada cara untuk mengetahui seberapa besar perbedaannya. Mereka dapat memiliki data yang identik tetapi pemformatan yang berbeda, atau mereka bisa saja berbeda di properti, atau mereka mungkin telah disimpan oleh versi yang berbeda. Bahkan jika Excel mirip Word, maka hanya menyimpan file memperbarui metadata-nya. Jika Anda hanya ingin membandingkan data numerik dan teks dan mengabaikan pemformatan dan properti, Anda dapat mengekspor spreadsheet ke CSV untuk membandingkannya.
Jika Anda memiliki alat Unix / Linux yang tersedia, maka Anda dapat menggunakan
cmp
untuk membandingkan dua file. Untuk membandingkan dua file pada mesin yang sama, checksum hanya membuat segalanya lebih rumit.sumber
n
item dimasukkan ke dalamm
wadah, dengann > m
, maka setidaknya satu kontainer harus mengandung lebih dari satu item." Jika Anda membuat lebih dari 2 ^ 64 pesan Anda akan mengalami tabrakan tanpa "kerajinan khusus". Dan Anda mungkin hanya dengan 2.Jawaban singkat: Sebuah hash kriptografi seharusnya untuk membantu Anda menjadi cukup yakin bahwa file dengan hash yang cocok adalah sama. Kecuali sengaja dibuat, kemungkinan dua file yang sedikit berbeda memiliki nilai hash yang serupa sangat kecil. Tetapi ketika datang untuk membandingkan dan memverifikasi file yang bisa dengan sengaja dirusak, MD5 adalah pilihan yang buruk. (Gunakan fungsi hash lain seperti SHA3 atau BLAKE2.)
Jawaban panjang: Fungsi hash yang ideal adalah hash yang menciptakan hash kriptografis yang hampir unik untuk setiap bagian data yang unik. Dengan kata lain, kita pasti tahu bahwa ada dua file di alam semesta ini yang nilai hashnya bertabrakan, kemungkinan kedua file ini secara alami bersatu adalah sangat kecil.
Sepuluh tahun yang lalu, saya memutuskan untuk tetap tinggal sejauh mungkin dari MD5. (Tentu saja, sampai kemarin, saya ingat alasan yang salah untuk melakukannya; sepuluh tahun adalah waktu yang lama, Anda lihat. Saya meninjau kembali memo masa lalu saya untuk mengingat mengapa dan mengedit jawaban ini.) Anda lihat, pada tahun 1996, MD5 ditemukan rentan terhadap serangan tabrakan. 9 tahun kemudian, para peneliti dapat membuat pasangan dokumen PostScript dan (ouch!) Sertifikat X.509 dengan hash yang sama! MD5 jelas rusak. (Megaupload.com juga menggunakan MD5, dan ada banyak saputangan di sekitar tabrakan hash yang memberi saya masalah pada saat itu.)
Jadi, saya menyimpulkan bahwa sementara MD5 (dan masih) dapat diandalkan untuk membandingkan file yang tidak berbahaya, kita harus berhenti menggunakannya sama sekali. Saya beralasan bahwa mengandalkannya memiliki risiko berubah menjadi indulgensi dan keyakinan salah: Setelah Anda mulai membandingkan file menggunakan hash MD5 mereka, suatu hari Anda lupa cetak finep keamanan dan membandingkan dua file yang sengaja dibuat untuk memiliki hash yang sama. Selain itu, CPU dan cryptoprocessor tidak mungkin menambahkan dukungan untuk itu.
Poster asli, bagaimanapun, memiliki alasan lebih sedikit untuk menggunakan MD5, karena:
sumber
Dari perspektif praktis, langsung membandingkan file untuk mengetahui apakah mereka berbeda akan lebih cepat daripada menghitung hash untuk setiap file dan kemudian membandingkan hash itu.
Untuk menghitung hash Anda harus membaca keseluruhan isi kedua file.
Untuk menentukan apakah mereka identik melalui perbandingan langsung, Anda hanya perlu membaca konten dari kedua file sampai mereka tidak cocok. Setelah Anda menemukan perbedaan, Anda tahu file tidak identik dan Anda tidak perlu membaca lebih banyak data dari kedua file.
Dan sebelum Anda melakukan keduanya, Anda dapat membandingkan ukuran kedua file tersebut. jika ukurannya berbeda maka isinya tidak bisa sama.
sumber
Hash seperti MD5 atau SHA memiliki panjang tetap, misalkan 300 karakter alfanumerik (pada kenyataannya mereka lebih pendek dan tidak menggunakan seluruh rangkaian karakter alfanumerik).
Katakanlah file dibuat dari karakter alfanumerik dan berukuran hingga 2GB.
Anda dapat dengan mudah melihat bahwa ada lebih banyak file (dengan ukuran hingga 2GB) daripada nilai hash yang mungkin. Prinsip pigeonhole mengatakan bahwa beberapa file (berbeda) harus memiliki nilai hash yang sama.
Juga, seperti yang ditunjukkan pada shattered.io 1 Anda dapat memiliki dua file berbeda: shattered.io/static/shattered-1.pdf dan shattered.io/static/shattered-2.pdf yang memiliki nilai hash SHA-1 yang sama saat menjadi benar-benar berbeda.
1 SHA1 adalah algoritma hashing "lebih kuat" dari md5
sumber
TIDAK. Nilai berbeda menjamin file berbeda. Nilai yang sama bukan jaminan file-nya sama. Relatif mudah untuk menemukan contoh menggunakan CRC16.
Pada keseimbangan probabilitas dengan skema hashing kontemporer mereka sama.
sumber
Pertanyaan Anda mundur, mari kita asumsikan bahwa hash berarti mereka memiliki data yang sama (yang tidak dijamin 100%, tetapi cukup baik untuk seumur hidup membandingkan file setiap detik untuk tidak mengenai tabrakan). Itu tidak selalu berarti memiliki data yang sama berarti mereka akan memiliki hash yang sama. Jadi tidak - Anda tidak dapat membandingkan data dalam file excel dengan data di file excel lain dengan hashing file karena ada banyak cara dua file dapat berbeda tanpa data yang mendasarinya berbeda. Satu cara yang jelas - data disimpan sebagai XML, setiap sel memiliki simpul XML sendiri. Jika node tersebut disimpan dalam urutan yang berbeda maka datanya sama tetapi file berbeda.
sumber
Untuk menambahkan jawaban lain, berikut adalah banyak contoh pasangan file dengan hash MD5 yang sama dan konten yang berbeda.
sumber
Jawaban untuk OP ini telah diberikan tetapi mungkin mendapat manfaat dari ringkasan.
Jika Anda ingin memeriksa apakah dua file sama, banyak tergantung pada apakah file dan hash berada di bawah kendali Anda.
Jika Anda menghasilkan hash sendiri dari file, dan Anda cukup yakin tidak ada orang lain yang memiliki kesempatan / keterampilan / motivasi untuk secara sengaja mencoba dan membuat Anda mencapai kesimpulan yang salah, maka hampir semua hash - bahkan hash yang "diketahui rusak" seperti MD5 dan SHA1 adalah hampir pasti cukup. Tapi itu, maksud saya Anda bisa menghasilkan file dengan kecepatan tinggi selama jutaan tahun dan Anda masih tidak akan berakhir dengan dua file yang sebenarnya berbeda tetapi memiliki hash yang sama. Hampir pasti aman.
Ini adalah skenario yang Anda miliki, ketika Anda ingin dengan cepat memeriksa apakah dua direktori pada PC atau server file Anda memiliki konten yang sama, jika ada file dalam direktori yang merupakan duplikat yang tepat, dll, dan Anda cukup yakin file tersebut belum telah direkayasa / dimodifikasi secara ilegal, dan Anda memercayai aplikasi / utilitas hashing Anda untuk memberikan hasil yang benar.
Jika Anda berada dalam skenario di mana salah satu file - atau hash yang dihitung sebelumnya - mungkin telah dimanipulasi atau direkayasa untuk menipu Anda ke kesimpulan yang salah, maka Anda memerlukan hash yang lebih kuat (tidak terputus), dan / atau keamanan lainnya. Misalnya, jika Anda mengunduh file dan memeriksa apakah itu valid dengan memeriksa hash, maka penyerang mungkin dapat merekayasa file buruk dengan hash yang benar, atau menyerang situs web untuk menempatkan hash yang salah ketika Anda mencari "kanan" " (nilai yang diharapkan. Ini berujung pada masalah keamanan yang lebih luas.
sumber
Pada baris perintah Windows, Anda dapat menggunakan
comp
utilitas untuk menentukan apakah dua file persis sama. Sebagai contoh:sumber
Tidak Jika hash yang berbeda, itu tidak berarti bahwa isi berbeda. Kode hash yang sama tidak menyiratkan konten yang sama. Kode hash adalah pengurangan domain besar ke rentang yang lebih kecil, menurut definisi: implikasinya adalah kode hash atas konten yang tidak setara dapat sama. Kalau tidak, tidak akan ada gunanya menghitungnya.
sumber
Jawaban ini dimaksudkan sebagai peta skenario berguna yang dapat atau tidak dapat terjadi, dan alasan yang dapat Anda terapkan. Lihat jawaban lain untuk mempelajari mengapa fungsi hash bekerja seperti ini.
Setelah Anda memilih fungsi hash dan tetap menggunakannya, ini semua kombinasi untuk dipertimbangkan:
Skenario di mana file identik menghasilkan nilai hash yang berbeda adalah satu-satunya yang benar-benar mustahil.
Dua alasan yang selalu berlaku:
Dua alasan yang tidak ketat :
sumber
Untuk keperluan Anda, ya, hash identik berarti file yang identik.
Sebagai jawaban lain menjelaskan, dimungkinkan untuk membangun 2 file berbeda yang menghasilkan hash yang sama dan MD5 tidak terlalu kuat dalam hal ini.
Jadi gunakan algoritma hashing yang lebih kuat jika Anda berencana membandingkan sejumlah besar dokumen excel atau jika Anda berpikir seseorang mungkin ingin memanipulasi perbandingan. SHA1 lebih baik dari MD5. SHA256 lebih baik lagi dan akan memberi Anda kepercayaan penuh untuk penggunaan khusus Anda.
sumber
File-file tersebut mungkin identik jika hash-nya identik. Anda dapat meningkatkan kepercayaan diri dengan memodifikasi kedua file dengan cara yang identik (misalnya, menempatkan nilai yang sama di sel yang tidak digunakan yang sama) lalu membandingkan hash dari file yang dimodifikasi. Sulit untuk membuat tabrakan yang disengaja untuk file yang diubah dengan cara yang tidak diketahui sebelumnya.
sumber
Mari kita lihat ini dengan cara yang praktis. Alih-alih mengatakan "hash adalah identik" Saya akan mengatakan "Saya menulis sebuah program komputer yang menghitung hash dari dua file dan mencetak apakah mereka sama atau tidak", dan saya menjalankan program dengan dua file, dan ia mengatakan "identik". Ada beberapa alasan mengapa itu bisa terjadi:
File mungkin identik. Kode saya mungkin memiliki bug (salah satu yang sebenarnya terjadi dalam praktek adalah membandingkan dua hash panjang (256 byte) tidak dengan memcmp tetapi dengan strcmp: Perbandingan akan mengembalikan "sama" jika byte pertama di setiap hash adalah nol, dan peluang untuk itu adalah 1 dalam 65536. Mungkin ada kesalahan perangkat keras (sinar kosmik memukul sel memori dan beralih). Atau Anda mungkin memiliki kasus langka dua file berbeda dengan hash identik (tabrakan hash).
Saya akan mengatakan bahwa untuk file yang tidak identik, sejauh ini penyebab yang paling mungkin adalah kesalahan programmer, kemudian muncul sinar kosmik yang mengubah variabel boolean dengan hasil membandingkan hash dari "false" menjadi "true", dan kemudian muncul kebetulan tabrakan hash.
Ada sistem cadangan perusahaan yang menghindari membuat cadangan file identik dari 10.000 pengguna dengan hashing setiap file dan memeriksa file dengan hash identik yang sudah disimpan di server. Jadi dalam kasus tabrakan file tidak akan didukung, mungkin menyebabkan kehilangan data. Seseorang menghitung bahwa kemungkinan besar meteorit mengenai server Anda dan menghancurkan semua cadangan daripada kehilangan file karena checksumenya cocok dengan file yang berbeda.
sumber