302

c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2我知道字符串“foobar”使用 http://hash.online-convert.com/sha256-generator生成 SHA-256 哈希

但是命令行外壳:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

生成不同的哈希。我错过了什么?

4

8 回答 8

467

echo通常会输出一个换行符,用-n. 试试这个:

echo -n foobar | sha256sum
于 2010-07-28T23:43:12.370 回答
116

如果你已经安装了openssl,你可以使用:

echo -n "foobar" | openssl dgst -sha256

对于其他算法,您可以替换-sha256-md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384,-sha512-whirlpool

于 2014-04-12T07:48:15.457 回答
49

如果命令 sha256sum 不可用(例如在Mac OS X v10.9 (Mavericks) 上),您可以使用:

echo -n "foobar" | shasum -a 256

于 2013-11-26T12:23:26.633 回答
32

echo -n工作并且由于大量的历史使用而不太可能消失,但是根据POSIX 标准的最新版本, “鼓励使用printf”新的符合标准的应用程序。

于 2010-07-28T23:48:14.207 回答
11

echo产生一个尾随换行符,它也被散列。尝试:

/bin/echo -n foobar | sha256sum 
于 2010-07-28T23:44:54.177 回答
7

我相信会echo输出一个尾随换行符。尝试使用-n作为参数来回显以跳过换行符。

于 2010-07-28T23:43:44.723 回答
6

对于base64中的sha256哈希,请使用:

echo -n foo | openssl dgst -binary -sha256 | openssl base64

例子

echo -n foo | openssl dgst -binary -sha256 | openssl base64
C+7Hteo/D9vJXQ3UfzxbwnXaijM=
于 2020-09-25T16:30:23.873 回答
5

使用printf而不是echo避免添加额外的换行符。

printf foobar | sha256sum
于 2021-08-24T18:26:52.927 回答