如何获取文件的sha256sum并比较以检查一行?

tar*_*yte 38 bash hashing

我一直发现自己想在脚本中立即下载并检查下载的完整性,但我一直无法找到正确的sha256sum.

MY_SHA256=e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5
sha256sum some_binary | sha256sum --check ${MY_SHA256}
Run Code Online (Sandbox Code Playgroud)

如何获取sha256sum新文件并立即将其与已知散列进行比较?

use*_*686 22

您可以看到它sha256sum --check采用先前(常规)sha256sum 运行的输出:它通过标准输入获取哈希值和文件名,并将它们与实际文件进行比较。

因此,显而易见的事情是手动为其提供所需格式的输出:

$ echo "da39a3ee5e6b4b0d3255bfef95601890afd80709  motd" | sha1sum --check
motd: OK
Run Code Online (Sandbox Code Playgroud)


Aks*_*rag 21

例子:

 echo "67574ee0039eaf4043a237e7c4b0eb432ca07ebf9c7b2dd0667e83bc3900b2cf kali-linux-2019.2-amd64.iso" | sha256sum -c
Run Code Online (Sandbox Code Playgroud)

如果您有该sha256sum文件,则可以直接使用它:

sha256sum -c "kali-linux-2019.2-amd64.iso.txt.sha256sum"
Run Code Online (Sandbox Code Playgroud)

解释:

在上面的例子中,你有

echo "<known SHA 256 sum of the file> <name of the file>" | sha256sum -c
Run Code Online (Sandbox Code Playgroud)

sha256sum -c选项可以从sha256sum文件或从STDIN. 如果您没有该sha256sum文件,则可以使用该echo命令提供包含在sha256sum文件中的相同详细信息。

如果您有该sha256sum文件,则可以直接使用它:

sha256sum -c "<sha256sum file name>"
Run Code Online (Sandbox Code Playgroud)

笔记:

或者,您可以使用shasum -a 256代替sha256sumwhere-a指定要使用的算法。


小智 19

我已经下载了一个存档文件和一个随附的校验和文件。以下是我验证下载存档的哈希值与下载的校验和文件中的哈希值匹配的方法:

echo "$(cat archive.tar.gz.sha256) archive.tar.gz" | sha256sum --check --status
Run Code Online (Sandbox Code Playgroud)

--status标志可防止所有 stdout 输出(比 更有效--quiet)。然后我需要依靠返回码来确定它们是否匹配,这正是我想要的,因为我将在脚本中使用它。

  • `echo "$(some-command)"` 几乎没有用。只需运行命令即可;例如,`cat filename.sha512 | sha512sum --检查 --status`。但这是一个UUOC;改为执行“sha512sum --check --status &lt; filename.sha512``”,甚至“sha512sum --check --status filename.sha512”(不带“&lt;”)。事实上,从文档来看,这是相当简单和明显的。……(续) (5认同)
  • 你不需要这样做。一个更简单的方法是“sha256sum --check CHECKSUM_FILE”。详情请参阅我的回答。 (4认同)
  • 好吧,就我而言,由于文件 sha512 已经包含文件名,所以我应该做的是 `echo "$(cat filename.sha512)" | sha512sum --check --status` 并立即使用 `$?` 检查返回值 (3认同)