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

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

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

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

Трудно сравнить эти 32 вывода символов с исходным/точным значением хэш-функции любым человеком для большие количества файлов. В первую очередь, задание было бы очень монотонным и существует большой объем ошибок.

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

28
задан 3 April 2014 в 20:34

3 ответа

Например, мне назвали файл 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

Кавычка от 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 файлы.


39
ответ дан 16 November 2019 в 11:35

Одна возможность состоит в том, чтобы использовать поддержки утилиты 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
2
ответ дан 16 November 2019 в 11:35

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

Это - двоичный файл, и позвольте, говорят, что корректное значение 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:~$ 
1
ответ дан 23 November 2019 в 00:57

Другие вопросы по тегам:

Похожие вопросы: