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

然而,命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

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


当前回答

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

其他回答

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

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

Echo -n "foobar" | shasum -a 256

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

/bin/echo -n foobar | sha256sum 

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

echo -n "foobar" | openssl dgst -sha256

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

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

printf foobar | sha256sum

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

printf '%s' 'somestring' | sha256sum