Dlaczego weryfikacja sumy kontrolnej SHA256 za pomocą `sha256sum` kończy się niepowodzeniem na Debianie i działa na Ubuntu?

34

Na Ubuntu 14.04 sha256sumz coreutilsdziała zgodnie z oczekiwaniami:

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

Jednak to samo polecenie z dokładnie tym samym plikiem w Debian Wheezy kończy się niepowodzeniem:

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

Nie rozumiem tego Jak mogę wiarygodnie zweryfikować sumę kontrolną w skrypcie powłoki Debiana?


W systemie Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

W sprawie Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

strony na obu systemach operacyjnych mówią:

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
źródło

Odpowiedzi:

45

Dba o odstępy. Jeśli uruchomisz:

sha256sum /dev/null

dostajesz

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(dwie spacje). Kiedy używasz w echoten sposób, między słowami jest tylko jedna spacja.

Wersja 8.13 wymaga dokładnego formatu, w jakim jest wyprowadzany. Jeśli używasz:

echo "$SUM  $FILE" | sha256sum -c

(znowu dwie spacje) powinno działać. Nowsze wersje nie dbają o to, ile jest miejsc, więc też będzie z nimi współpracować.

Michael Homer
źródło
18
Dodano ciekawostki: Druga postać kosmiczna ma w rzeczywistości znaczenie. Oznacza to, że suma kontrolna została obliczona w trybie tekstowym . Natomiast *przed nazwą pliku oznacza tryb binarny . Porównaj wyjście sha256sum -t /dev/null(tryb tekstowy, domyślny) z sha256sum -b /dev/null(tryb binarny). Najwyraźniej nie robi to różnicy w systemach Unix / Linux, ale może to mieć miejsce w systemie Windows .
Dubu