Как автоматизировать сравнение значений хеша md5sum для большого количества файлов

17

Я могу проверить хеш md5sum файла с терминала как

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Но сложная часть заключается в сравнении хэш-значения с точным.

Трудно сравнить вывод 32 символов с оригинальным / точным значением хэша любым человеком для большого количества файлов. Прежде всего, работа была бы очень монотонной и было бы большое количество ошибок.

  

Можно ли автоматизировать процесс сравнения, предпочтительно в CLI?

    
задан souravc 03.04.2014 в 16:34
источник

3 ответа

23

Например, у меня есть файл с именем test_binary .

Сумма файла MD5 для файла ef7ab26f9a3b2cbd35aa3e7e69aad86c

Чтобы проверить, автоматически ли это выполняется:

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

или

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

Цитата из man

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

Цитата из wiki

  

Примечание. Между каждым значением md5sum и именем файла должно быть два пробела   для сравнения. В противном случае возникает следующая ошибка: «нет   правильно отформатированные строки контрольной суммы MD5 ".

Ссылка на wiki

Также вы можете просто прочитать хэши md5 из файла

$ md5sum -c md5sum_formatted_file.txt

Ожидается файл с форматом:

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

О * и <space> после хэша суммы MD5. В человеке мало внимания:

 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 файлов.

ответ дан c0rp 03.04.2014 в 16:46
источник
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
    
ответ дан Elliott Frisch 03.04.2014 в 16:46
0

Да, для этой команды требуется звездочка * . Взгляните на этот пример.

Это двоичный файл, и пусть правильное значение md5sum равно exampleofcorrectmd5value00000000 (32 шестнадцатеричный символ)

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

-c, --check

     

читать MD5 суммы из FILE и проверять их

Если значение md5sum соответствует двоичному файлу, вы получите этот вывод

[[email protected] ~]# md5sum -c <<< "exampleofcorrectmd5value00000000" *binary-file.run.tgz"
binary-file.run.tgz: OK
[[email protected] ~]# 

И это когда значение md5sum не соответствует

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

Без звездочки * вы получите следующее сообщение об ошибке, даже считая, что значение md5 верно

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

Кроме того, вы получите то же сообщение об ошибке, если в md5sum нет 32 шестнадцатеричных символов. В этом примере он имеет только 31 символ.

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

Решение для многих файлов

Если у вас много файлов и вы хотите автоматизировать процесс, вы можете выполнить следующие действия:

[email protected]:~$ 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
[email protected]:~$ 

Создайте md5sum для каждого файла и сохраните его в файле md5sum.txt

[email protected]:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
[email protected]:~$ 

Чтобы проверить md5sum для всех файлов, используйте следующую команду.

[email protected]:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
[email protected]:~$ 

Это пример, если значение md5sum не совпадает с файлом. В этом случае я собираюсь изменить file-b content

[email protected]:~$ echo "new data" > file-b 
[email protected]:~$ 

См., это сообщение об ошибке. Надеюсь, это поможет.

[email protected]:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: FAILED
file-c: OK
md5sum: WARNING: 1 computed checksum did NOT match
[email protected]:~$ 
    
ответ дан Charlotte Russell 05.11.2017 в 13:42