从Linux命令行生成sha256

hen*_*dry 215 linux shell sha256

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

但是命令行shell:

hendry@x201 ~$ echo foobar | sha256sum 
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -
Run Code Online (Sandbox Code Playgroud)

生成不同的哈希.我错过了什么?

mvd*_*vds 327

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

echo -n foobar | sha256sum
Run Code Online (Sandbox Code Playgroud)

  • 注意:在OS X(BSD)上,它是`echo -n foobar | shasum -a 256` (69认同)
  • 在OSX上,创建别名可能很方便:`alias sha256sum ='shasum --algorithm 256'` (10认同)
  • 只需使用`printf`;) (6认同)
  • 为什么以 *- 结尾 (2认同)
  • @PhilipRego这是stdin上输入的阴影,因此会打印文件名`-`而不是。 (2认同)
  • 仅显示散列而不显示 - 或 *- 将以下内容添加到显示的命令中 | 剪切-d“”-f1 (2认同)
  • 输出“-”太糟糕了...我已经知道文件名了,我愚蠢地通过管道输入给你!你就不能只做一件事吗?! (2认同)

Far*_*and 90

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

echo -n "foobar" | openssl dgst -sha256
Run Code Online (Sandbox Code Playgroud)

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

  • 与接受的答案不同,这适用于MacOS. (3认同)
  • @AlistairMacDonald - 我不知道你到底在找什么。AFAIK,SHA512需要80轮;如果你想操作这个函数,就不再是sha512了。顺便说一句,您可以在 [crypto.stackexchange.com](https://crypto.stackexchange.com/“Cryptography Stack Exchange”) 中搜索/提出您的问题。 (2认同)

Suc*_*oir 43

如果命令sha256sum不可用(例如,在特立独行者上),您可以使用:

echo -n "foobar" | shasum -a 256

  • 好的!我已将其添加到我的 .bash_profile 函数 sha256() { echo -n "$*" | shasum -a 256 } 并调用: ~$ sha256 foobar (2认同)
  • 或者您的意思是*[Ubuntu 10.10 (Maverick Meerkat)](https://en.wikipedia.org/wiki/Ubuntu_version_history#Ubuntu_10.10_.28Maverick_Meerkat.29)*?(没有's',*特立独行*)。它于 2010 年发布,而 Mac OS X v10.9 在此答案前一个月发布。 (2认同)

Nic*_*ght 28

echo -n由于大量的历史使用而工作并且不太可能消失,但是根据POSIX标准的最新版本,"鼓励使用printf" 新的符合要求的应用程序.


use*_*745 17

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

echo -n foo | openssl dgst -binary -sha256 | openssl base64
Run Code Online (Sandbox Code Playgroud)

例子

echo -n foo | openssl dgst -binary -sha256 | openssl base64
C+7Hteo/D9vJXQ3UfzxbwnXaijM=
Run Code Online (Sandbox Code Playgroud)

  • 我很高兴我向下滚动 - 一直试图通过组合“shasum”和“base64”来获得 Base64 哈希值,但一直得到错误的结果。关键是传递给“openssl”的“-binary”参数,感谢您的发帖! (3认同)

hev*_*ev1 14

使用printf而不是echo避免添加额外的换行符。

printf foobar | sha256sum
Run Code Online (Sandbox Code Playgroud)

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

printf '%s' 'somestring' | sha256sum
Run Code Online (Sandbox Code Playgroud)

  • 那应该是 `printf '%s' "foobar" | sha256sum` 如果您不完全知道“foobar”的值,因为 printf 采用格式字符串。据我所知,“print”只是 zsh 中的一个类似 echo 的东西,它需要“-n”。 (6认同)
  • 并且不要混淆 print 和 printf,print 仍然添加新行 (2认同)

Nor*_*ame 8

echo产生一个尾随的换行符,也是经过哈希处理的.尝试:

/bin/echo -n foobar | sha256sum 
Run Code Online (Sandbox Code Playgroud)


Tho*_*ens 7

我相信echo输出一个尾随的换行符.尝试使用-necho作为参数跳过换行符.