Hash 理解命令行OpenSSL DGST Sha256命令

Hash 理解命令行OpenSSL DGST Sha256命令,hash,command-line,openssl,sha,Hash,Command Line,Openssl,Sha,我在终端中使用命令openssl dgst-sha256-binary u your_file u path | openssl enc-base64获取jar文件的输出,该文件与AWS Lambda用于散列的内容相匹配 我想用Java编程,但我很难准确地理解这一行的内容,这样我就可以完成代码中的每个步骤。显然,在SHA256中有一种模式,而不仅仅是散列,因为当我这样做时,输出不匹配 有人能帮我简单地解释一下line正在完成的步骤吗?您需要将命令分解以了解发生了什么 命令的第一部分: open

我在终端中使用命令
openssl dgst-sha256-binary u your_file u path | openssl enc-base64
获取jar文件的输出,该文件与AWS Lambda用于散列的内容相匹配

我想用Java编程,但我很难准确地理解这一行的内容,这样我就可以完成代码中的每个步骤。显然,在SHA256中有一种模式,而不仅仅是散列,因为当我这样做时,输出不匹配


有人能帮我简单地解释一下line正在完成的步骤吗?

您需要将命令分解以了解发生了什么

  • 命令的第一部分:
    • openssldgst-sha256-binary
      为文件提供sha256二进制校验和
  • 命令的第二部分:
    • openssl enc-base64
      将SHA256二进制校验和编码为base64
  • 因此,要在Java中进行复制,只需执行相同的步骤:

  • 计算SHA256二进制校验和
  • Base64对SHA256二进制校验和进行编码
  • 如果您没有将用于尝试获取SHA256校验和的命令分别发布到您发布的命令,我猜您获取不同哈希的原因可能是因为默认情况下,校验和似乎以十六进制输出

    请参见下面的示例,以及结果如何完全不同

    #十六进制
    $openssl dgst-sha256 data.csv
    SHA256(data.csv)=114811b0b8998cb9853a5379598021410feddf69bb2ee7b7145d052a7e9b5d45
    #二进制(注意-Binary标志的用法)
    $openssl dgst-sha256-binary data.csv
    H:茜!Ai.]*~]E
    
    如果将上面的十六进制校验和与二进制校验和进行Base64编码,您还将得到两个完全不同的结果,如下所示

    #十六进制
    $printf 114811b0b8998cb9853a5379598021410feddf69bb2ee7b7145d052a7e9b5d45 | openssl enc-base64
    MTE0ODExYjBiODk5OGNiOTg1M2E1Mzc5NTk4MDIxNDEwZmVkZGY2OWJiMmVlN2I3
    MTQ1ZDA1ME3ZTLINWQ0NQ==
    #二进制的
    $printf'H:SyY!Ai.]*~]E'| openssl加密-base64
    SDpTeVkhQWkuXSp+XUU=
    
    对于那些需要TLDR的人
    要获得与此
    cat FILENAME.js | openssl dgst-sha256-binary | openssl base64-A
    命令相同的结果,您应进行以下转换:

    1) your content -> sha256 (you'll get the hexadecimal number, not a text)
    2) hexadecimal -> binary
    3) binary -> base64
    

    如果您知道二进制格式的定义/规范(或者至少是描述性自述文件),最好添加一个链接。我现在需要自己找到它,所以我会开始查找,但我怀疑我可能会再次浏览openssl源代码……根据我自己的评论,到目前为止,SHA摘要似乎是网络顺序/bigendian X位数字(例如256位、512位),以及用于文本输出的这些数字的十六进制表示。如果错误,我们将在稍后再次评论。