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

然而,命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

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


当前回答

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

/bin/echo -n foobar | sha256sum 

其他回答

Echo通常会输出一个换行符,用-n来抑制。试试这个:

echo -n foobar | sha256sum

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

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

例子

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

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

printf foobar | sha256sum

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

printf '%s' 'somestring' | sha256sum

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

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

echo -n "foobar" | openssl dgst -sha256

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