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

然而,命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

生成一个不同的散列。我错过了什么?


当前回答

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

Echo -n "foobar" | shasum -a 256

其他回答

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

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

例子

echo -n foo | openssl dgst -binary -sha256 | openssl base64
C+7Hteo/D9vJXQ3UfzxbwnXaijM=

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

Echo生成一个尾随换行符,它也是散列的。试一试:

/bin/echo -n foobar | sha256sum 

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

使用printf代替echo以避免添加额外的换行符。

printf foobar | sha256sum

对于任意字符串,应该使用%s格式说明符。

printf '%s' 'somestring' | sha256sum