Comment automatiser la comparaison des valeurs de hachage md5sum pour un grand nombre de fichiers

28

Je peux vérifier le hachage md5sum d'un fichier à partir d'un terminal comme,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Mais la partie difficile est de comparer la valeur de hachage avec la valeur exacte.

Il est difficile de comparer la sortie de 32 caractères avec la valeur de hachage originale / exacte par un humain pour un grand nombre de fichiers. Tout d'abord, le travail serait très monotone et il y a de grandes erreurs.

Est-il possible d'automatiser le processus de comparaison, de préférence en CLI?

souravc
la source

Réponses:

39

Par exemple, j'ai un fichier appelé test_binary.

La somme MD5 du test de fichier est ef7ab26f9a3b2cbd35aa3e7e69aad86c

Pour le tester, exécutez automatiquement ceci:

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

ou

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

Citation de l'homme

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

Citation du wiki

Remarque: Il doit y avoir deux espaces entre chaque valeur md5sum et chaque nom de fichier à comparer. Sinon, l'erreur suivante se produit: "aucune ligne de somme de contrôle MD5 correctement formatée n'a été trouvée".

Lien vers le wiki

Vous pouvez également lire les hachages md5 à partir du fichier

$ md5sum -c md5sum_formatted_file.txt

Il attend un fichier au format:

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

À propos *et <space>après le hachage de somme MD5. Il y a peu de chose chez l'homme:

 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.

Et voici le lien vers stackoverflow où j'ai trouvé la réponse à la question, pourquoi devrions-nous parfois distinguer les binaryfichiers et les textfichiers.


c0rp
la source
3
L'astérisque est-il nécessaire?
jobin
Question interessante. J'utilise toujours avec *, mais wiki a dit qu'il devrait y avoir deux espaces. Je vais chercher ...
c0rp
@souravc ok, j'ai trouvé des informations sur *, sera mis à jour bientôt
c0rp
@Jobin J'ajoute des informations *pour répondre
c0rp
Ça a du sens. +1 pour
jobin
2

Une possibilité est d'utiliser l'utilitaire cfv

sudo apt-get install cfv

CFV prend en charge de nombreux types de hachages, ainsi que les tests et la création de fichiers de hachage.

# 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
la source
1
merci pour votre réponse, mais il doit installer un autre utilitaire. Dans le même temps, il fournit également des supports vers d'autres formats. Il est bon de le savoir. Mais dans le contexte actuel, j'irai avec l'autre réponse. Quoi qu'il en soit +1 de moi.
souravc
1

Oui, un astérisque *est requis pour cette commande. Jetez un oeil à cet exemple.

Ceci est le fichier binaire, et disons que la valeur md5sum correcte est exampleofcorrectmd5value00000000(32 caractères hexadécimaux)

[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

lire les sommes MD5 des FICHIERS et les vérifier

Si la valeur md5sum correspond au fichier binaire, vous obtiendrez cette sortie

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

Et c'est quand la valeur md5sum ne correspond pas

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

Sans astérisque *, vous obtiendrez le message d'erreur suivant même si la valeur md5 est correcte

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

En outre, vous obtiendrez le même message d'erreur si md5sum ne contient pas 32 caractères hexadécimaux. Dans cet exemple, il n'a que 31 caractères.

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

Solution pour de nombreux fichiers

Si vous avez de nombreux fichiers et souhaitez automatiser le processus, vous pouvez suivre ces étapes:

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

Générez md5sum pour chaque fichier et enregistrez-le dans md5sum.txt

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

Pour vérifier md5sum pour tous les fichiers, utilisez la commande suivante.

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

C'est un exemple si la valeur md5sum ne correspond pas au fichier. Dans ce cas, je vais modifier le file-bcontenu

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

Voir, c'est le message d'erreur. J'espère que cela t'aides.

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:~$ 
Charlotte Russell
la source