Saya ingin membuat cara cepat untuk mendeteksi apakah suatu file mungkin atau tidak sama. Untuk kepastian hampir 100% saya akan menggunakan algoritma hash yang ada, misalnya SHA256. Namun, file tersebut diharapkan menjadi file video besar dengan beberapa GB, sehingga menghitung hash SHA256 dapat memakan waktu, terutama melalui jaringan.
Karena itu saya ingin menggabungkan berbagai teknik lain:
- ukuran file: jika ukuran file telah berubah, konten telah berubah (pasti)
- kepala / ekor hash
- hash acak
2 yang terakhir adalah bagian dari pertanyaan saya:
Dugaan saya adalah bahwa di header ada beberapa hal seperti:
- frame rate (mis. Video)
- resolusi (mis. Video, Gambar)
- (file) panjang (mis. dalam bingkai, piksel, dll.)
- tanggal perubahan terakhir (mis. dokumen Word, bukan khusus Video)
Mengapa saya mempertimbangkan untuk memeriksa ekornya adalah:
- MP3 memiliki informasi tag di sana
- EXIF menambahkan data khusus pada akhirnya jika saya benar
Hash acak akan memilih misalnya 126 wilayah pada posisi acak dalam file dengan panjang tertentu, misalnya 64 kB dan membuat hash untuknya. Tentu saja saya ingat offset untuk perbandingan nanti. Secara keseluruhan saya akan menggunakan (1 + 126 + 1) * 64 kB data untuk hash saya, jadi saya hanya perlu membaca 8 MB daripada beberapa GB untuk mendapatkan hash.
Mungkin ini lebih merupakan pertanyaan Matematika sekarang, tetapi: seberapa besar kemungkinannya untuk mendeteksi perubahan menggunakan kombinasi ukuran file, kepala, ekor dan data acak untuk menghasilkan jumlah hash cepat ini?
Saya berasumsi bahwa file selalu file yang legal. Tidak ada manfaatnya memanipulasi byte tunggal. Pengguna akan menggunakan alat pengeditan video normal untuk mengubah file.
UPDATE : Saya menerima jawaban ini yang berasal dari Crypto.StackExchange. Saya setuju bahwa proposal saya bukan kriptografi dan tidak dimaksudkan untuk aman. Saya juga setuju bahwa CRCing file cepat, tetapi dalam kasus saya saya benar-benar membutuhkan hash - saya akan menjelaskan alasannya:
- Aplikasi saya diharapkan untuk menyimpan bookmark di video. Basis data saya diharapkan untuk menyimpan hash video dan bookmark.
- Pengguna terkadang memindahkan atau mengganti nama file. Program saya akan melihat bahwa file tidak ada lagi, tetapi tidak akan menghapus bookmark dari database. Alih-alih, ketika video yang sama diputar secara tidak sengaja, saya ingin mengenali bahwa itu mungkin file yang sama.
- Pengguna diharapkan untuk menyimpan file di drive jaringan (NAS) dan streaming video. Itu adalah penyimpanan bodoh. Saya tidak dapat menginstal komponen server. Dan mereka mungkin sangat lambat, jadi saya benar-benar tidak ingin hash penuh. Menghitung hash penuh pada file 3 GB membutuhkan setidaknya 5 menit @ 10 MB / s, tidak peduli seberapa cepat algoritma hashing.
- Jika pengguna telah mengedit file, saya entah bagaimana berharap hash tidak akan cocok lagi, karena kalau tidak saya akan menampilkan bookmark yang salah.
Saya akan baik-baik saja dengan peluang ~ 80% untuk memiliki bookmark yang benar. Berapa banyak potongan hash yang harus saya kumpulkan dan di mana dalam file itu?