为什么我从 Mac 的 shasum 得到的结果与从其他 shasum 计算器得到的结果不同?

pet*_*oak 13 console checksum macos

我输入:

appletree:~ somename$ shasum -a 512 <<< test
Run Code Online (Sandbox Code Playgroud)

输出是:

0e3e75234abc68f4378a86b3f4b32a198ba301845b0cd6e50106e874345700cc6663a86c1ea125dc5e92be17c98f9a0f85ca9d5f595db2012f7cc3571945c123  -
Run Code Online (Sandbox Code Playgroud)

然后我去一些在线哈希生成器并输入“test”。他们的回答是:

http://hashgenerator.de/ :

ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff
Run Code Online (Sandbox Code Playgroud)

http://passwordsgenerator.net/sha512-hash-generator/

EE26B0DD4AF7E749AA1A8EE3C10AE9923F618980772E473F8819A5D4940E0DB27AC185F8A0E1D5F84F88BC887FD67B143732C304CC5FA9AD8E6F57F50028A8FF
Run Code Online (Sandbox Code Playgroud)

所以在线生成器同意。我在 Mac 控制台命令中缺少什么?

我正在阅读man页面。我看到它是使用 Perl 库实现的。但是,我认为 sha512 将是一个独特的名称,所以我必须深入挖掘。


似乎有一个重复的问题:为什么我的命令行哈希与在线 MD5 哈希结果不同?. 虽然另一个问题在相同的上下文中,这是意外的空白,但它出现在不同的情况下。

  • <<<是一个here string,并且对于 here 字符串如何添加换行符有一个设计选择
  • echo 'bla' |表示管道,它调用子外壳,并且还有关于如何处理换行符的参数。这里看来你得考虑一下shell版本了

sid*_*ker 32

shasum问题中调用的输入是test\n(带有换行符),而不是test

如果您test不提供换行符,shasum您将获得与您引用的在线工具相同的输出:

$ echo -n "test" | shasum -a 512
ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff  -
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我认为在 MacOS 上shasum找到的没有什么特别的或特定于 MacOS 的;我认为它shasum是标准 Perl 发行版的一部分——与例如perl命令一起安装。


Spi*_*iff 19

尝试这个:

hexdump -C <<< test
Run Code Online (Sandbox Code Playgroud)

了解 Unix shell,您可能会在该字符串的末尾得到一个不需要的 0x0a。

  • `od` 将标记控制字符并使其更加明显;尝试:`od -ta -t x1 &lt;&lt;&lt; test`(从未真正使用过十六进制转储), (2认同)