我正在使用 Windows 7,并且拥有 Cygwin 和基于 ming 的 Git 命令行工具。
当我发出命令时:
c:\>echo -n hello | e:\cygwin\bin\sha512sum
从 Windows cmd 中,它会生成
91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-
我相信不正确。
但是,当我发出命令时
$ echo -n hello | /e/cygwin/bin/sha512sum
从 git 命令行,它会生成
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-
我认为这是正确的十六进制校验和。我假设完全相同的输入被发送到完全相同的二进制可执行文件,但根据我看到的行为,这不可能是正确的。Windows CMD 是否进行了某种有趣的编码,将不同的输入发送到 cygwin sha512 二进制文件?
编辑 对于任何有兴趣从标准 Windows cmd 提示符获取正确校验和的人来说,诀窍是不要使用窗口 echo 命令(答案暗示了这一点)。使用 cygwin 的 echo 命令可生成正确的校验和。
例如,
e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum
答案1
echo
即使使用 调用,默认的 Windows命令也会添加空格和行终止符-n
。尝试以下操作:echo -n hello > a.txt
后跟dir
,您将看到您没有 5 字节文件。
答案2
默认的 Windows echo 不理解“-n”。因此这两个命令并不等效。
e:\cygwin64\bin>echo -n "hello" |od -c
0000000 - n " h e l l o " \r \n
0000015
$ echo -n "hello" |od -c
0000000 h e l l o
0000005