Como automatizar a comparação de valores de hash md5sum para um grande número de arquivos

19

Posso verificar o hash md5sum de um arquivo de um terminal como

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Mas a parte difícil é comparar o valor do hash com o exato.

É difícil comparar a saída de 32 caracteres com o valor de hash original / exato de qualquer ser humano para um grande número de arquivos. Primeiro de tudo, o trabalho seria muito monótono e há grande escopo de erros.

  

É possível automatizar o processo de comparação, preferencialmente na CLI?

    
por souravc 03.04.2014 / 18:34

3 respostas

25

Por exemplo, eu tenho um arquivo chamado test_binary .

A soma MD5 do teste de arquivo é ef7ab26f9a3b2cbd35aa3e7e69aad86c

Para testar, execute isto automaticamente:

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

ou

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

Citação do homem

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

Cite do wiki

  

Observação: deve haver dois espaços entre cada valor de md5sum e nome de arquivo   para ser comparado. Caso contrário, o seguinte erro resultará: "não   linhas de checksum MD5 formatadas corretamente encontradas ".

Link para o wiki

Além disso, você pode apenas ler md5 hashes do arquivo

$ md5sum -c md5sum_formatted_file.txt

Espera arquivo com formato:

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

Sobre * e <space> após o hash da soma MD5. Há pouca nota no homem:

 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.

E aqui está o link para stackoverflow onde encontrei a resposta na pergunta, por que devemos, às vezes, distinguir binary arquivos e text arquivos.

por c0rp 03.04.2014 / 18:46
2

Uma possibilidade é usar o utilitário cfv

sudo apt-get install cfv

O CFV suporta muitos tipos de hashes e testes e criação de arquivos 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
    
por Elliott Frisch 03.04.2014 / 18:46
1

Sim, o asterisco * é necessário para este comando. Dê uma olhada neste exemplo.

Este é o arquivo binário e digamos que o valor correto de md5sum é exampleofcorrectmd5value00000000 (32 caracteres hexadecimais)

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

     

leia as somas MD5 dos FILEs e verifique-as

Se o valor md5sum corresponder ao arquivo binário, você obterá essa saída

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

E isso é quando o valor md5sum não corresponde

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

Sem asterisco * , você receberá a seguinte mensagem de erro, mesmo que o valor md5 esteja correto

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

Além disso, você receberá a mesma mensagem de erro se o md5sum não tiver 32 caracteres hexadecimais. Neste exemplo, ele possui apenas 31 caracteres.

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

Solução para muitos arquivos

Se você tiver muitos arquivos e quiser automatizar o processo, siga estas etapas:

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

Gere md5sum para cada arquivo e salve-o em md5sum.txt

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

Para verificar o md5sum para todos os arquivos, use o seguinte comando.

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

Este é um exemplo se o valor md5sum não corresponder ao arquivo. Neste caso, vou modificar file-b content

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

Veja, esta é a mensagem de erro. Espero que isso ajude.

[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]:~$ 
    
por Charlotte Russell 05.11.2017 / 14:42