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

19

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 hash con quello esatto.

È difficile confrontare l'output di 32 caratteri con il valore hash originale / esatto di qualsiasi essere umano per un numero elevato di file. Prima di tutto il lavoro sarebbe molto monotono e ci sono grandi possibilità di errori.

  

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

    
posta souravc 03.04.2014 - 18:34

3 risposte

27

Ad esempio, ho un file chiamato test_binary .

La somma MD5 del test del 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 dalla wiki

  

Nota: ci devono essere due spazi tra ogni valore md5sum e nomefile   da confrontare. In caso contrario, si verificherà il seguente errore: "no   Linee di checksum MD5 formattate correttamente ".

Link alla wiki

Puoi anche leggere gli hash MD5 dal file

$ md5sum -c md5sum_formatted_file.txt

Si aspetta file con formato:

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

Informazioni su * e <space> dopo hash somma MD5. C'è poca 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.

E qui c'è il collegamento a stackoverflow dove ho trovato la risposta sulla domanda, perché dovremmo, a volte, distinguere i file binary e text .

risposta data c0rp 03.04.2014 - 18:46
2

Una possibilità è di usare l'utilità cfv

sudo apt-get install cfv

CFV supporta molti tipi di hash e la creazione di file di test e 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
    
risposta data Elliott Frisch 03.04.2014 - 18:46
1

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

Questo è il file binario, e diciamo che il valore corretto di md5sum è exampleofcorrectmd5value00000000 (32 caratteri esadecimali)

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

     

leggi le somme MD5 dai FILE e controllali

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

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

E questo è quando il valore md5sum non corrisponde

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

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

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

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

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

Soluzione per molti file

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

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

Genera md5sum per ogni file e salvalo in md5sum.txt

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

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

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

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

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

Vedi, questo è il messaggio di errore. Spero che questo aiuti.

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

Leggi altre domande sui tag