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

然而,命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

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


当前回答

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

/bin/echo -n foobar | sha256sum 

其他回答

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

printf foobar | sha256sum

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

printf '%s' 'somestring' | sha256sum

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

Echo -n "foobar" | shasum -a 256

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

echo -n foobar | sha256sum

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

/bin/echo -n foobar | sha256sum 

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

echo -n "foobar" | openssl dgst -sha256

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