从Linux命令行生成SHA-256哈希


233

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

但是命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

生成不同的哈希。我想念什么?


4
sha256sum < foobar。不需要catechoprintf,...另请参见猫的无用?
koppor

7
@koppor < foobar与相同echo foobar |。等效于echo foobar |sha256sum <<< foobar但确实会像那样在foobar中添加换行符echo
mvds

openssl dgst -sha256 foobar在MacOS High Sierra上为我工作,但echo -n foobar | openssl dgst -sha256给出了错误的答案。
auspicious99

Answers:


362

echo通常会输出换行符,用禁止-n。试试这个:

echo -n foobar | sha256sum

76
注意:在OS X(BSD)上,它是echo -n foobar | shasum -a 256
Olie

6
只是使用printf;)
dylnmc 2015年

11
在OSX上,创建别名可能很方便:alias sha256sum='shasum --algorithm 256'
Jonathan Cross

1
为什么以*-结尾
Philip Rego

2
@PhilipRego这是在stdin上输入的阴影,因此将-打印文件名而不是文件名。
mvds

100

如果已安装openssl,则可以使用:

echo -n "foobar" | openssl dgst -sha256

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


有没有办法在sha512中指定想要的回合数?我看了一下却找不到,想知道你是否知道?
f1lt3r

1
@AlistairMacDonald-我不知道您到底在寻找什么。AFAIK,SHA512需要80发子弹;如果要操作该函数,它将不再是sha512。顺便说一句,您可以在crypto.stackexchange.com中搜索/询问您的问题。
Farahmand

3
与公认的答案不同,这适用于MacOS。
weefwefwqg3

45

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

echo -n "foobar" | shasum -a 256


1
真好!我已经将此添加到我的.bash_profile函数sha256(){echo -n“ $ *” | shasum -a 256}并像这样调用:〜$ sha256 foobar
rbento

与公认的答案不同,此方法适用于MacOS
weefwefwqg3

或者您是说Ubuntu 10.10(Maverick Meerkat)?(“'s',小牛”)。它在2010年发布,而Mac OS X v10.9在此答案发布前一个月发布。
Peter Mortensen


8

echo产生一个尾随的换行符,该字符也被散列。尝试:

/bin/echo -n foobar | sha256sum 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.