Tout sur les sommes de contrôle, y compris les informations de base et l'utilisation
TLDR;
# 1. Vérifiez si le fichier "nom du fichier" a cette somme de contrôle attendue :
# `expected_checksum_hash`
echo "expected_checksum_hash nom du fichier" | sha256sum --check
# 2. Vérifiez si ces deux fichiers ("chemin/vers/fichier1" et "chemin/vers/fichier2")
# ont la même somme de contrôle
echo "$(sha256sum "chemin/vers/fichier1" | gawk '{ print $1 }') chemin/vers/fichier2" \
| sha256sum --check
# OU (identique à #2 ci-dessus)
file1_hash="$(sha256sum "chemin/vers/fichier1" | gawk '{ print $1 }')" \
&& echo "$file1_hash chemin/vers/fichier2" | sha256sum --check
DÉTAILS :
1. Informations de base
Remarque : vous pouvez utiliser sha256sum
ou sha512sum
dans chacun des exemples ci-dessous. Ce sont les sommes de contrôle cryptographiques recommandées et les plus robustes, avec sha512sum
, bien sûr, étant plus forte.
Il y a aussi md5sum
, mais elle n'est pas aussi robuste, mais est toujours couramment utilisée pour les contrôles d'intégrité des données. Dans la mesure du possible, je vous recommande d'utiliser sha256sum
ou sha512sum
à la place. Wikipédia indique que md5sum
est toujours bon pour les contrôles d'intégrité des données, mais n'est plus considéré comme sûr et ne doit pas être utilisé à des fins cryptographiques. Alors, utilisez simplement sha256sum
ou sha512sum
ci-dessus, à la place.
Il y en a encore d'autres, cependant. Voici une liste des différents programmes de somme de contrôle que vous pouvez techniquement utiliser dans chacun des exemples ci-dessous :
sha1sum
sha224sum
sha256sum
sha384sum
sha512sum
shasum # outil polyvalent, nécessite de spécifier l'algorithme
md5sum
2. Obtenir la somme de contrôle d'un fichier :
sha256sum chemin/vers/nimportequel/fichier
Exemple :
$ sha256sum FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz
6b579bd4ecdf86f7e70a009886c511da0b5085b831b0d6afc42442cabc249b90 FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz
Remarquez que la sortie de la commande sha256sum
est la somme de contrôle numérique suivie du nom du fichier correspondant à cette somme de contrôle. Vous pouvez stocker cette somme de contrôle dans un fichier nommé sha256sum.txt
comme ceci :
sha256sum chemin/vers/fichier > sha256sum.txt
3. Comparer la somme de contrôle d'un fichier par rapport à une somme de contrôle précédemment stockée ou déjà connue :
Maintenant, en supposant que vous voulez vérifier l'intégrité du fichier par rapport à cette somme de contrôle connue dans ce fichier, vous pouvez tester à nouveau le fichier de cette manière :
# Cela fait que le programme refait la somme de contrôle du fichier spécifié à l'intérieur
# de sha256sum.txt, puis la compare à la somme de contrôle dans ce même fichier. Si elles
# (la somme de contrôle recalculée et la somme de contrôle déjà stockée) correspondent, il affichera
# le nom du fichier suivi de "OK".
sha256sum --check sha256sum.txt
Exemple :
$ sha256sum --check sha256sum.txt
FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz: OK
Vous pouvez également transmettre manuellement ces éléments (la somme de contrôle attendue et le nom du fichier) au programme de somme de contrôle, comme ceci. C'est vraiment utile lorsque vous devez vérifier un fichier téléchargé par rapport à une somme de contrôle connue publiée en ligne d'où vous l'avez téléchargé. De cette façon, vous pouvez vérifier l'intégrité des données pour vous assurer que le fichier téléchargé a été téléchargé avec succès.
# 1. transmettre directement au programme de somme de contrôle
echo "expected_checksum_hash filename" | sha256sum --check
# 2. OU, créer manuellement le fichier de somme de contrôle, et *ensuite* l'exécuter sur ce fichier
# comme fait précédemment
echo "expected_checksum_hash filename" > sha256sum.txt
sha256sum --check sha256sum.txt # identique à ce qui a été fait précédemment
Exemple de l'option 1 ci-dessus :
$ echo "6b579bd4ecdf86f7e70a009886c511da0b5085b831b0d6afc42442cabc249b90 \
> FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz" | sha256sum --check
FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz: OK
4. Pour comparer la somme de contrôle de fichier1
à fichier2
:
Parfois, vous avez deux fichiers téléchargés, ou deux copies de ce que vous pensez être le même fichier, et vous voulez simplement vous assurer qu'ils sont en fait les mêmes (ou différents). En s'appuyant sur les informations ci-dessus, il y a quelques façons de le faire.
-
Vérifiez manuellement la somme de contrôle de chaque fichier, en regardant manuellement les hachages pour vous assurer qu'ils correspondent :
sha256sum 'chemin/vers/fichier1'
sha256sum 'chemin/vers/fichier2'
# maintenant inspectez visuellement les deux hachages
-
OU [RECOMMANDÉ] testez automatiquement le fichier1 contre le fichier2 :
# Faites quelques astuces pour comparer le hachage du fichier1 au hachage du fichier2.
# En effet, ce que nous avons fait est ceci :
# `echo "checksum_hash_from_file1 chemin/vers/fichier2" | sha256sum --check`
# Cela vérifie donc si le hachage du fichier1 correspond au hachage
# du fichier2.
echo "$(sha256sum "chemin/vers/fichier1" | gawk '{ print $1 }') chemin/vers/fichier2" \
| sha256sum --check
# OU (identique à ci-dessus)
file1_hash="$(sha256sum "chemin/vers/fichier1" | gawk '{ print $1 }')" \
&& echo "$file1_hash chemin/vers/fichier2" | sha256sum --check
La façon dont cela fonctionne est que d'abord cela vérifie la somme de contrôle du fichier1, transmettant la sortie (hachage et nom de fichier) à gawk
, qui est la version GNU de awk
, qui est un langage de correspondance de motifs et de traitement de texte. La commande gawk '{ print $1 }'
dit simplement de supprimer le premier champ de texte séparé par des espaces (indiqué par $1
), et de le conserver uniquement. C'est le hachage de la somme de contrôle du fichier1. Ensuite, nous ajoutons le chemin/vers/fichier2
et nous transmettons le tout pour être vérifié, comme fait précédemment.
En fait, nous trompons le programme de somme de contrôle en lui faisant croire que nous avons un hachage obtenu précédemment à partir du fichier2, et nous aimerions le vérifier contre un hachage nouvellement calculé à partir du fichier2. Comme nous avons utilisé le hachage du fichier1, cependant, mais le nom de fichier du fichier2, nous savons que s'il réussit, il affirme vraiment que le fichier1 et le fichier2 ont le même hachage, et sont donc des fichiers identiques.
Exemple :
# technique 1
$ echo "$(sha256sum "FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz" \
| gawk '{ print $1 }') FoxitReader.enu.setup.2.4.4.0911_NEW.x64.run.tar.gz" \
| sha256sum --check
FoxitReader.enu.setup.2.4.4.0911_NEW.x64.run.tar.gz: OK
# technique 2
$ file1_hash="$(sha256sum "FoxitReader.enu.setup.2.4.4.0911.x64.run.tar.gz" \
| gawk '{ print $1 }')" \
&& echo "$file1_hash FoxitReader.enu.setup.2.4.4.0911_NEW.x64.run.tar.gz" \
| sha256sum --check
FoxitReader.enu.setup.2.4.4.0911_NEW.x64.run.tar.gz: OK