Pourquoi la vérification de la somme de contrôle SHA256 avec `sha256sum` échoue-t-elle sur Debian et fonctionne-t-elle sur Ubuntu?

34

Sur Ubuntu 14.04, sha256sumde coreutilsfonctionne comme prévu:

echo 879dd0d7637876be4796f7e6f194a111d21088be85cfe717fc97e2e7f05e79d2 /tmp/myfile | sha256sum -c
/tmp/myfile: OK

Cependant, la même commande avec le même fichier sur Debian Wheezy échoue:

sha256sum: standard input: no properly formatted SHA256 checksum lines found

Je ne comprends pas ça. Comment puis-je vérifier la somme de contrôle de manière fiable dans un script shell sur Debian?


Sur Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

Sur Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

Les pages de manuel sur les deux systèmes d’exploitation indiquent:

SYNOPSIS
       sha256sum [OPTION]... [FILE]...

DESCRIPTION
       Print or check SHA256 (256-bit) checksums.  With no FILE,
       or when FILE is -, read standard input.

[...]

       -c, --check
              read SHA256 sums from the FILEs and check them
Gertvdijk
la source

Réponses:

45

Il se soucie de l'espacement. Si vous courez:

sha256sum /dev/null

vous recevez

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(deux espaces). Lorsque vous utilisez echocomme ça, il n'y a qu'un espace entre les mots.

La version 8.13 veut que le format exact de sa sortie soit. Si vous utilisez:

echo "$SUM  $FILE" | sha256sum -c

(encore une fois, deux espaces) cela devrait fonctionner. Les versions plus récentes ne se soucient pas du nombre d'espaces, cela fonctionnera donc aussi avec elles.

Michael Homer
la source
18
Jeu-questionnaire ajouté: Le deuxième caractère d'espace a en fait une signification. Cela indique que la somme de contrôle a été calculée en mode texte . En revanche, un *devant le nom du fichier indique le mode binaire . Comparez la sortie de sha256sum -t /dev/null(mode texte, valeur par défaut) avec sha256sum -b /dev/null(mode binaire). Cela ne fait apparemment pas une différence sous Unix / Linux, mais pourrait le faire sous Windows .
Dubu