为什么在Debian上用`sha256sum`验证SHA256校验和失败并在Ubuntu上起作用?


34

在Ubuntu 14.04,sha256sumcoreutils作品如我所料:

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

但是,在Debian Wheezy上使用完全相同的文件执行完全相同的命令将失败:

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

我不明白 如何在Debian上的Shell脚本中可靠地验证校验和?


在Ubuntu 14.04上:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

在Wheezy上:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

两种操作系统的联机帮助页上说:

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

Answers:


45

它关心间距。如果您运行:

sha256sum /dev/null

你得到

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(两个空格)。当您那样使用时echo,单词之间只有一个空格。

版本8.13要求其输出使用的确切格式。如果使用:

echo "$SUM  $FILE" | sha256sum -c

(再次,两个空格)它应该工作。较新的版本不在乎有多少空间,因此也可以使用它们。


18
增加了琐事:第二个空格字符实际上具有含义。它表示校验和是在文本模式下计算的。相反,*文件名前面的a 表示二进制模式。比较sha256sum -t /dev/null(文本模式,默认)和sha256sum -b /dev/null(二进制模式)的输出。显然,在Unix / Linux上没有什么区别,但是在Windows上可以
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.