Come automatizzare il confronto dei valori hash md5sum per un gran numero di file


28

Posso controllare l'hash md5sum di un file da un terminale come,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Ma la parte difficile è confrontare il valore di hash con quello esatto.

È difficile confrontare i 32 caratteri in uscita con il valore hash originale / esatto di qualsiasi essere umano per un gran numero di file. Innanzitutto il lavoro sarebbe molto monotono e ci sono molti errori.

È possibile automatizzare il processo di confronto, preferibilmente nella CLI?

Risposte:


39

Ad esempio ho un file chiamato test_binary.

La somma di MD5 del test dei file è ef7ab26f9a3b2cbd35aa3e7e69aad86c

Per testarlo esegui automaticamente questo:

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

o

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

Citazione da uomo

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

Citazione dal wiki

Nota: ci devono essere due spazi tra ogni valore md5sum e il nome file da confrontare. In caso contrario, si verificherà il seguente errore: "nessuna riga di checksum MD5 correttamente formattata trovata".

Link alla wiki

Inoltre puoi leggere gli hash md5 dal file

$ md5sum -c md5sum_formatted_file.txt

Si aspetta un file con il formato:

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

Informazioni su *e <space>dopo l'hash della somma MD5. C'è una piccola nota nell'uomo:

 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.

Ed ecco il link a StackOverflow dove ho trovato la risposta alla domanda, perché dovremmo, a volte, distinguere binaryfile e textfile.



3
L'asterisco è necessario?
jobin

Domanda interessante. Uso sempre con *, ma wiki ha detto che dovrebbero essere due spazi.
Cercherò

@souravc ok, ho trovato informazioni su *, aggiornerò presto
c0rp

@Jobin Aggiungo informazioni *per rispondere
c0rp

Ciò ha senso.
Ha

2

Una possibilità è quella di utilizzare l'utilità cfv

sudo apt-get install cfv

CFV supporta molti tipi di hash e sia la verifica che la creazione di 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

1
grazie per la risposta, ma deve installare un'altra utility. Allo stesso tempo fornisce supporto anche ad altri formati. È bene saperlo. Ma in questo contesto andrò con l'altra risposta. Comunque +1 da me.
souravc,

1

Sì, l'asterisco *è richiesto per questo comando. Dai un'occhiata a questo esempio.

Questo è il file binario e supponiamo che il valore md5sum corretto sia exampleofcorrectmd5value00000000(32 caratteri esadecimali)

[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

leggere le somme MD5 dai FILE e controllarle

Se il valore md5sum corrisponde al file binario, otterrai questo output

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

E questo è quando il valore md5sum non corrisponde

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

Senza asterisco *, riceverai il seguente messaggio di errore anche se il valore md5 è corretto

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

Inoltre, riceverai lo stesso messaggio di errore se md5sum non contiene 32 caratteri esadecimali. In questo esempio, ha solo 31 caratteri.

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

Soluzione per molti file

Se hai molti file e desideri automatizzare il processo, puoi seguire questi passaggi:

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

Genera md5sum per ogni file e salvalo in md5sum.txt

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

Per controllare md5sum per tutti i file, utilizzare il seguente comando.

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

Questo è un esempio se il valore md5sum non corrisponde al file. In questo caso, ho intenzione di modificare il file-bcontenuto

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

Vedi, questo è il messaggio di errore. Spero che sia di aiuto.

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:~$ 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.