【问题标题】:Generating a SHA-256 hash from the Linux command line从 Linux 命令行生成 SHA-256 哈希
【发布时间】:2011-03-22 11:12:30
【问题描述】:

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

然而命令行shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

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

【问题讨论】:

  • sha256sum < foobar。不需要catechoprintf,...另见Useless use of cat?
  • @koppor < foobarecho foobar | 不同。 echo foobar | 的等价物是 sha256sum <<< foobar,但这确实会像 echo 一样在 foobar 中添加一个换行符。

标签: linux shell sha256


【解决方案1】:

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

echo -n foobar | sha256sum

【讨论】:

  • 这个命令sha256sum和Solaris中的digest命令一样吗??
  • 注意:在 OS X (BSD) 上,它是 echo -n foobar | shasum -a 256
  • 在 OSX 上,创建别名可能会很方便:alias sha256sum='shasum --algorithm 256'
  • 为什么以*-结尾
  • @PhilipRego 这是标准输入上输入的shasum,因此会打印文件名-
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    /bin/echo -n foobar | sha256sum 
    

    【讨论】:

      【解决方案4】:

      echo -n 有效,并且由于历史上的大量使用而不太可能消失,但是根据the POSIX standard 的最新版本,“鼓励使用printf”的新的符合要求的应用程序。

      【讨论】:

        【解决方案5】:

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

        echo -n "foobar" | shasum -a 256

        【讨论】:

        • 不错!我已将此添加到我的 .bash_profile 函数 sha256() { echo -n "$*" | shasum -a 256 } 并调用:~$ sha256 foobar
        • 或者你的意思是Ubuntu 10.10 (Maverick Meerkat)? (没有's',Maverick)。它于 2010 年发布,而 Mac OS X v10.9 在此答案前一个月发布。
        【解决方案6】:

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

        echo -n "foobar" | openssl dgst -sha256
        

        对于其他算法,您可以将-sha256 替换为-md4-md5-ripemd160-sha-sha1-sha224-sha384-sha512 或 @987654333 /p>

        【讨论】:

        • 有没有办法在sha512中指定你想要的轮数?我看了看没找到,不知道你知道吗?
        • @AlistairMacDonald - 我不知道你在找什么。 AFAIK,SHA512 需要 80 轮;如果你想操作这个函数,它就不再是 sha512 了。顺便说一句,您可以在crypto.stackexchange.com 中搜索/提问。
        【解决方案7】:

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

        echo -n foo | openssl dgst -binary -sha256 | openssl base64
        

        示例

        echo -n foo | openssl dgst -binary -sha256 | openssl base64
        C+7Hteo/D9vJXQ3UfzxbwnXaijM=
        

        【讨论】:

          【解决方案8】:

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

          printf foobar | sha256sum
          

          【讨论】:

          • 并且不要混淆 print 和 printf,print 还是添加新行
          • 如果您不完全知道“foobar”的值,那应该是printf '%s' "foobar" | sha256sum,因为 printf 采用格式字符串。据我所知,print 只是 zsh 中的一个 echo-alike,它需要-n
          猜你喜欢
          • 1970-01-01
          • 2011-04-15
          • 2021-11-25
          • 2014-08-19
          • 2017-09-20
          • 2023-03-18
          • 2011-04-18
          • 2013-01-09
          • 2023-03-17
          相关资源
          最近更新 更多