Je peux vérifier le hash md5sum d'un fichier depuis un terminal,
$ 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 aurait une grande quantité d'erreurs.
Est-il possible d'automatiser le processus de comparaison, de préférence en CLI?
Par exemple, j'ai un fichier appelé test_binary
.
La somme MD5 du test de fichier est ef7ab26f9a3b2cbd35aa3e7e69aad86c
Pour le tester, lancez 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 de wiki
Remarque: Il doit y avoir deux espaces entre chaque valeur md5sum et le nom du fichier à comparer. Sinon, l’erreur suivante sera générée: "Aucune ligne de somme de contrôle MD5 correctement formatée n’a été trouvée".
Aussi, vous pouvez simplement lire les hachages md5 du fichier
$ md5sum -c md5sum_formatted_file.txt
Il attend un fichier au format:
<md5sum_checksum><space><space><file_name>
À propos de *
et <space>
après le hash sum MD5. Il y a peu de note 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 fichiers binary
et les fichiers text
?.
Une possibilité consiste à 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
Oui, un astérisque *
est requis pour cette commande. Jetez un oeil à cet exemple.
Ceci est le fichier binaire, et disons que la valeur correcte de md5sum 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 à partir des FICHIERS et les vérifier
Si la valeur md5 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 à ce moment que 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 ~]#
De plus, vous recevrez le même message d'erreur si md5sum ne contient pas 32 caractères hexadécimaux. Dans cet exemple, il ne comporte 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 beaucoup de fichiers
Si vous avez plusieurs fichiers et souhaitez automatiser le processus, procédez comme suit:
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 md5 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:~$
Ceci est un exemple si la valeur md5sum ne correspond pas au fichier. Dans ce cas, je vais modifier le contenu de file-b
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:~$