41 votes

Comment prendre le sha256sum d'un fichier et le comparer pour vérifier en une seule ligne ?

Je continue de me retrouver à vouloir télécharger et vérifier immédiatement l'intégrité du téléchargement dans un script, mais je n'ai pas réussi à trouver la bonne incantation de sha256sum.

MY_SHA256=e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5
sha256sum some_binary | sha256sum --check ${MY_SHA256}

Comment puis-je prendre le sha256sum d'un nouveau fichier et le comparer immédiatement avec un hash connu?

25voto

James Mertz Points 390

Vous pouvez voir que la commande sha256sum --check prend en entrée la sortie d'une exécution précédente (normale) de sha256sum : elle prend les hachages et les noms de fichiers via stdin, et les compare aux fichiers réels.

Donc la chose évidente à faire est de lui donner manuellement la sortie dans le format qu'elle attend :

$ echo "da39a3ee5e6b4b0d3255bfef95601890afd80709  motd" | sha1sum --check
motd: OK

25voto

peedee Points 366

J'ai téléchargé un fichier d'archive et un fichier de vérification de somme de contrôle associé. Voici comment je vérifie que le hachage de l'archive téléchargée correspond au hachage du fichier de somme de contrôle téléchargé :

echo "$(cat archive.tar.gz.sha256) archive.tar.gz" | sha256sum --check --status

Le drapeau --status empêche toute sortie stdout (plus efficace que --quiet). Je dois ensuite me fier au code de retour pour déterminer s'ils correspondent, ce qui est ce que je veux de toute façon puisque je vais utiliser cela dans un script.

22voto

Akshay Anurag Points 331

Exemple :

 echo "67574ee0039eaf4043a237e7c4b0eb432ca07ebf9c7b2dd0667e83bc3900b2cf kali-linux-2019.2-amd64.iso" | sha256sum -c

Si vous avez le fichier sha256sum, vous pouvez l'utiliser directement :

sha256sum -c "kali-linux-2019.2-amd64.iso.txt.sha256sum"

Explication :

Dans l'exemple ci-dessus, vous avez

echo " " | sha256sum -c

L'option sha256sum -c peut soit lire la somme SHA256 à partir d'un fichier sha256sum soit à partir de STDIN. Si vous n'avez pas le fichier sha256sum, alors en utilisant la commande echo vous pouvez fournir les mêmes détails contenus dans un fichier sha256sum.

Si vous avez le fichier sha256sum, vous pouvez l'utiliser directement :

sha256sum -c ""

Note :

Alternativement, vous pouvez utiliser shasum -a 256 au lieu de sha256sum-a spécifie l'algorithme à utiliser.

1voto

Diejmon Points 111

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.

  1. 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
  2. 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

0voto

WaMaBoSe Points 1

J'avais un scénario où les fichiers sha256 n'avaient pas le nom de fichier, aucune ligne de contrôle de checksum SHA256 correctement formatée trouvée, comme par exemple :

cat file.sha256
5b2266edc48f958687ab0f597f62dde1c6f01693d988e272411d081292991476

donc j'ai dû récupérer chaque fichier avec .sha256, le lire pour obtenir le sha et ensuite formater l'entrée pour la commande sha256sum, comme ceci :

for file in *.sha256; do echo $(cat $file) $(basename $file .sha256) | sha256sum --check; done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X