Mengapa memverifikasi SHA256 checksum dengan `sha256sum` gagal pada Debian dan bekerja di Ubuntu?

34

Di Ubuntu 14.04, sha256sumdari coreutilspekerjaan seperti yang saya harapkan:

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

Namun, perintah yang sama persis dengan file yang sama persis pada Debian Wheezy gagal:

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

Saya tidak mengerti ini. Bagaimana saya bisa memverifikasi checksum dengan andal dalam skrip shell di Debian?


Di Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

Di Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

halaman manual di kedua OS mengatakan:

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
sumber

Jawaban:

45

Itu peduli tentang jarak. Jika Anda menjalankan:

sha256sum /dev/null

Anda mendapatkan

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(dua spasi). Ketika Anda menggunakan echoseperti itu, hanya ada satu ruang di antara kata-kata.

Versi 8.13 ingin format yang tepat untuk outputnya. Jika Anda menggunakan:

echo "$SUM  $FILE" | sha256sum -c

(Sekali lagi, dua spasi) itu harus berfungsi. Versi yang lebih baru tidak peduli berapa banyak ruang yang tersedia, jadi itu akan bekerja dengan mereka juga.

Michael Homer
sumber
18
Menambahkan trivia: Karakter ruang kedua sebenarnya memiliki makna. Ini menunjukkan bahwa checksum telah dihitung dalam mode teks . Sebaliknya, a *di depan nama file menunjukkan mode biner . Bandingkan output dari sha256sum -t /dev/null(mode teks, default) dengan sha256sum -b /dev/null(mode biner). Tampaknya ini tidak membuat perbedaan di Unix / Linux, tetapi bisa di Windows .
Dubu