13 votes

Comment vérifier la somme de contrôle ou le hachage d'un fichier téléchargé en ligne de commande ?

Si j'ai téléchargé un fichier depuis Internet et que le site source a fourni un checksum ou une empreinte (par ex. SHA-256), comment puis-je vérifier que l'empreinte du fichier téléchargé correspond à celle indiquée sur le site?

Par exemple, j'ai téléchargé un fichier et le site indique que l'empreinte SHA-256 pour celui-ci est :

d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915

Je sais comment créer une empreinte SHA-256 du fichier téléchargé en utilisant :

shasum -a 256 /chemin/vers/le/fichier_telechargé.pkg

Cependant, je ne veux pas faire une vérification manuelle, autrement dit par la vue, de l'empreinte. Au lieu de cela, je veux comparer les deux empreintes en utilisant une commande comme diff, de préférence en exécutant une seule commande en ligne de commande.

6voto

Jose Chavez Points 645

Vous avez déjà reçu des réponses sur la façon de faire une comparaison automatisée des deux valeurs de hachage pour vous assurer qu'elles sont complètement identiques. Je voulais juste ajouter un angle différent sur la façon de comparer les valeurs de hachage.

En fait, il est presque toujours suffisant de faire une "comparaison visuelle". C'est-à-dire si vous vérifiez que les premiers caractères et les derniers caractères sont les mêmes, et que cela "semble identique" - alors c'est une très bonne vérification.

Si vous essayez de faire une comparaison automatisée "par cœur", il y a un risque que vous saisissiez accidentellement la mauvaise ligne de commande ou que vous modifiez subtilement le sens de la commande.

L'alternative à le faire de mémoire est de passer du temps à trouver et à copier-coller le script/la ligne de commande chaque fois que vous avez besoin de vérifier. Cela peut entraîner des situations où nous renonçons simplement à la vérification, parce que nous sommes pressés ou que nous estimons que le risque est faible.

La raison pour laquelle une "comparaison visuelle" est le plus souvent suffisante est qu'il est vraiment, vraiment difficile pour un attaquant de créer un fichier avec une valeur de hachage SHA-256 qui est "presque la même" que celle du fichier original. C'est presque aussi difficile que de créer une valeur de hachage SHA-256 identique à celle du fichier original. Vous pourriez probablement supposer que s'ils peuvent en créer une, ils peuvent en créer une autre.

Les propriétés de SHA-256 (et en réalité de tout hachage cryptographique) sont telles que même le moindre changement apporté au fichier entraîne une valeur de hachage largement différente.

6voto

jligda Points 19

Lorsque vous calculez d'abord la somme d'un fichier, cela produit une sortie composée de la somme, de deux espaces et du nom du fichier ayant produit cette somme. Si vous redirigez cette sortie vers un fichier, vous pouvez ensuite utiliser l'option "-c" ("vérification") pour vérifier automatiquement chaque fichier répertorié, pour voir si la somme correspond toujours.

Donc, créez un fichier texte appelé "checksum.txt" avec une ligne :

d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  downloaded.pkg

Ensuite, exécutez la commande :

shasum -a 256 -c checksum.txt

La commande calculera la somme de contrôle sha-256 du fichier "downloaded.pkg", comparera le résultat avec la valeur précalculée, et vous dira si cela correspond ou non.

Vous n'aurez peut-être même pas à créer vous-même le fichier de somme ; la plupart du temps, les sites web qui fournissent des sommes de contrôle vous permettront de télécharger un fichier texte déjà dans le bon format.

3voto

nohillside Points 82672

Vous pouvez comparer le checksum directement avec une fonction bash:

function checksha256() {
    # Utilisation: checksha256 fichier checksum
    if [[ $(shasum -a 256 "$1" | cut -f 1 -d' ') == "$2" ]]; then
        echo Correspondance
    else
        echo Pas de correspondance
    fi
}

ou

function checksha256() {
    # Utilisation: checksha256 fichier checksum
    echo "$1  $2" | shasum -s -a 256 -c
}

Les deux espaces sont importants dans ce cas car c'est le format que shasum attend.

2voto

TransferOrbit Points 219

Une solution consiste à utiliser diff pour comparer les chaînes des deux hachages. Heureusement, cela peut être fait en une seule commande dans l'invite de commande comme suit :

diff -is <(echo "d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  /chemin/vers/fichier.telecharge.pkg") <(shasum -a 256 /chemin/vers/fichier.telecharge.pkg)

Une note importante : Il doit y avoir deux espaces entre le hachage dans la première partie du terme et le chemin vers votre fichier téléchargé.

Comme alternative, on peut utiliser l'option de vérification intégrée de shasum :

echo "d9cd63f187db2daea1371289508c63a7a24c46316f15ac61f030a7d6ea423915  /chemin/vers/fichier.telecharge.pkg" | shasum -a 256 -c

Des parties de cette réponse existent à différents endroits, mais malgré des recherches avides, je n'ai pas trouvé qu'elles aient été regroupées quelque part. Si vous connaissez de meilleures alternatives, je serais heureux de les entendre.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X