为什么 cygwin sha512 会根据终端创建不同的校验和?

为什么 cygwin sha512 会根据终端创建不同的校验和?

我正在使用 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

相关内容