Cara mengotomatiskan perbandingan nilai hash md5sum untuk sejumlah besar file

28

Saya dapat memeriksa hash file md5sum dari terminal sebagai,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Tetapi bagian yang sulit adalah membandingkan nilai hash dengan yang tepat.

Sulit untuk membandingkan keluaran 32 karakter dengan nilai hash asli / tepat oleh manusia mana pun untuk sejumlah besar file. Pertama-tama pekerjaan itu akan sangat monoton dan ada banyak kesalahan.

Apakah mungkin untuk mengotomatiskan proses perbandingan, lebih disukai di CLI?

souravc
sumber

Jawaban:

39

Misalnya saya punya file bernama test_binary.

Jumlah tes file MD5 adalah ef7ab26f9a3b2cbd35aa3e7e69aad86c

Untuk mengujinya jalankan ini secara otomatis:

$ md5sum -c <<<"ef7ab26f9a3b2cbd35aa3e7e69aad86c *path/to/file/test_binary"
test_binary: OK

atau

$ echo "595f44fec1e92a71d3e9e77456ba80d1  filetohashA.txt" | md5sum -c -

Kutipan dari manusia

   -c, --check
          read MD5 sums from the FILEs and check them

Kutipan dari wiki

Catatan: Harus ada dua ruang antara setiap nilai md5sum dan nama file yang akan dibandingkan. Jika tidak, kesalahan berikut akan menghasilkan: "tidak ditemukan garis MD5 checksum yang diformat dengan benar".

Tautan ke wiki

Anda juga dapat membaca hash md5 dari file

$ md5sum -c md5sum_formatted_file.txt

Ini mengharapkan file dengan format:

<md5sum_checksum><space><space><file_name>

Tentang *dan <space>setelah MD5 jumlah hash. Ada sedikit catatan dalam diri manusia:

 When  checking,  the
       input  should  be a former output of this program.  The default mode is
       to print a line with checksum, a character indicating input  mode  ('*'
       for binary, space for text), and name for each FILE.

Dan di sini ada tautan ke stackoverflow di mana saya menemukan jawaban atas pertanyaan, mengapa kita, terkadang, membedakan binaryfile dan textfile.


c0rp
sumber
3
Apakah tanda bintang diperlukan?
jobin
Pertanyaan menarik. Saya selalu menggunakan dengan *, tetapi wiki mengatakan bahwa itu harus dua spasi. Saya akan mencari ...
c0rp
@souravc ok, saya menemukan informasi tentang *, akan segera diperbarui
c0rp
@Obob Saya menambahkan informasi tentang *jawaban
c0rp
Itu masuk akal. +1
pekerjaan pada
2

Salah satu kemungkinan adalah menggunakan utilitas cfv

sudo apt-get install cfv

CFV mendukung banyak jenis hash, dan keduanya pengujian dan pembuatan file hash.

# List the files
$ ls
test.c
# Create a hash file
$ cfv -tmd5 -C
temp.md5: 1 files, 1 OK.  0.001 seconds, 302.7K/s
# Test the hash file
$ cfv -tmd5 -T
temp.md5: 1 files, 1 OK.  0.001 seconds, 345.1K/s
# Display the hash file
$ cat *.md5
636564b0b10b153219d6e0dfa917d1e3 *test.c
Elliott Frisch
sumber
1
terima kasih atas jawaban Anda, tetapi perlu menginstal utilitas lain. Pada saat yang sama ia memberikan dukungan ke format lain juga. Adalah baik untuk mengetahuinya. Tetapi pada konteks saat ini saya akan pergi dengan jawaban yang lain. Pokoknya +1 dari saya.
souravc
1

Ya, tanda bintang *diperlukan untuk perintah ini. Lihatlah contoh ini.

Ini adalah file biner, dan katakanlah nilai md5sum yang benar adalah exampleofcorrectmd5value00000000(32 karakter hexadecimal)

[root@Linux update]# ls -lh
total 137M
-rw-r--r-- 1 root root 137M Nov  5 13:01 binary-file.run.tgz
[root@Linux update]# 

-c, --check

baca jumlah MD5 dari FILE dan periksa

Jika nilai md5sum cocok dengan file biner, Anda akan mendapatkan output ini

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[root@Linux ~]# 

Dan ini adalah saat nilai md5sum tidak cocok

[root@Linux update]# md5sum -c <<< "exampleofwrongmd5value0000000000 *binary-file.run.tgz"
binary-file.run.tgz: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
[root@Linux update]# 

Tanpa asterisk *, Anda akan mendapatkan pesan kesalahan berikut ini bahkan berpikir nilai md5 benar

[root@Linux ~]# md5sum -c <<< "exampleofcorrectmd5value00000000 binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

Selain itu, Anda akan mendapatkan pesan kesalahan yang sama jika md5sum tidak memiliki 32 karakter heksadesimal di dalamnya. Dalam contoh ini, hanya memiliki 31 karakter.

[root@Linux ~]# md5sum -c <<< "exampleofmd5valuelessthan32char *binary-file.run.tgz" 
md5sum: standard input: no properly formatted MD5 checksum lines found
[root@Linux ~]# 

Solusi untuk banyak file

Jika Anda memiliki banyak file dan ingin mengotomatiskan prosesnya, Anda dapat mengikuti langkah-langkah ini:

user@Ubuntu:~$ ls -lh
total 12K
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-a
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-b
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-c
user@Ubuntu:~$ 

Hasilkan md5sum untuk setiap file dan simpan ke md5sum.txt

user@Ubuntu:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
user@Ubuntu:~$ 

Untuk memeriksa semua file md5sum, gunakan perintah berikut.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
user@Ubuntu:~$ 

Ini adalah contoh jika nilai md5sum tidak cocok dengan file. Dalam hal ini, saya akan mengubah file-bkonten

user@Ubuntu:~$ echo "new data" > file-b 
user@Ubuntu:~$ 

Lihat, ini adalah pesan kesalahan. Semoga ini membantu.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
user@Ubuntu:~$ 
Charlotte Russell
sumber