从Linux命令行生成SHA-256散列

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

然而,命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

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

420319 次浏览

echo通常会输出一个换行符,该换行符被-n抑制。试试这个:

echo -n foobar | sha256sum

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

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

/bin/echo -n foobar | sha256sum

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

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

echo -n "foobar" | shasum -a 256

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

echo -n "foobar" | openssl dgst -sha256

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

对于< >强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