Як автоматизувати порівняння хеш-значень md5sum для великої кількості файлів


28

Я можу перевірити md5sum хеш файлу з терміналу як,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Але складною є порівняння хеш-значення з точним.

Важко порівняти виведення 32 символів з оригінальним / точним хеш-значенням будь-якої людини для великої кількості файлів. Перш за все, робота була б дуже одноманітною і є велика кількість помилок.

Чи можливо автоматизувати процес порівняння, бажано в CLI?

Відповіді:


39

Наприклад, у мене є файл під назвою test_binary.

MD5 сума файлового тесту є ef7ab26f9a3b2cbd35aa3e7e69aad86c

Щоб перевірити його автоматично, запустіть це:

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

або

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

Цитата від людини

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

Цитата з вікі

Примітка: між кожним значенням md5sum та іменем файлу повинно бути два пробіли для порівняння. В іншому випадку виникла наступна помилка: "не знайдено належним чином відформатованих рядків контрольної суми MD5".

Посилання на вікі

Також ви можете просто прочитати хеди md5 з файлу

$ md5sum -c md5sum_formatted_file.txt

Очікує файл з форматом:

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

Про хеш-суму суми MD5 *та <space>після неї. У людини мало примітки:

 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.

І ось посилання на stackoverflow, де я знайшов відповідь на питання, чому ми, іноді, слід розрізняти binaryфайли та textфайли.



3
Чи потрібна зірочка?
приєднатися

Цікаве запитання. Я завжди використовую *, але wiki говорив, що це повинні бути два пробіли. Буду шукати ...
c0rp

@souravc добре, я знайшов інформацію про *, незабаром
оновлюсь

@Jobin Я додаю інформацію, *щоб відповісти
c0rp

Що має сенс. Поставив +1
приєднався

2

Однією з можливостей є використання утиліти cfv

sudo apt-get install cfv

CFV підтримує багато типів хешей, а також тестування та створення хеш-файлів.

# 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

1
дякую за вашу відповідь, але для цього потрібно встановити іншу утиліту. У той же час він також підтримує інший формат. Про це добре знати. Але в теперішньому контексті я піду з іншою відповіддю. Все одно +1 від мене.
souravc

1

Так, *для цієї команди потрібна зірочка . Погляньте на цей приклад.

Це двійковий файл, і скажімо, що правильне значення md5sum становить exampleofcorrectmd5value00000000(32 шістнадцяткових знаків)

[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, - перевірити

прочитайте суми MD5 з ФАЙЛІВ та перевірте їх

Якщо значення md5sum збігається з двійковим файлом, ви отримаєте цей вихід

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

І це коли значення md5sum не збігається

[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]# 

Без зірочки *ви отримаєте таке повідомлення про помилку, навіть вважаючи, що значення md5 правильне

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

Крім того, ви отримаєте те саме повідомлення про помилку, якщо md5sum не має в ньому 32 шістнадцяткових символів. У цьому прикладі він містить лише 31 символ.

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

Рішення для багатьох файлів

Якщо у вас є багато файлів і ви хочете автоматизувати процес, ви можете виконати наступні дії:

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:~$ 

Створіть md5sum для кожного файлу і збережіть його в md5sum.txt

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

Щоб перевірити md5sum на всі файли, використовуйте наступну команду.

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

Це приклад, якщо значення md5sum не відповідає файлу. У цьому випадку я збираюся змінити file-bвміст

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

Дивіться, це повідомлення про помилку. Сподіваюся, це допомагає.

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:~$ 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.