Ubuntu

如何使用一個命令行驗證校驗和?

  • January 29, 2022

假設我鍵入並執行以下命令:

sha256sum ubuntu-18.04.1-desktop-amd64.iso

延遲後,將輸出以下內容:

5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433  ubuntu-18.04.1-desktop-amd64.iso

然後,我意識到我應該輸入以下命令來更快地評估 SHA-256 雜湊是否匹配:

sha256sum ubuntu-18.04.1-desktop-amd64.iso | grep 5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433

有沒有辦法在不使用sha256sum命令第二次驗證校驗和的情況下對第一個輸出進行操作(即,避免這樣做會導致的延遲)?具體來說:

  1. 我想知道如何使用不需要複製和粘貼第一個輸出的校驗和(如果可能的話)的命令來執行此操作
  2. 我想知道使用需要複製和粘貼第一個輸出校驗和的命令來執行此操作的最簡單方法。(簡單地嘗試grep在雙引號粘貼校驗和(即作為字元串)上使用是行不通的。)

Q1:我想知道如何使用不需要複製和粘貼第一個輸出的校驗和(如果可能的話)的命令來執行此操作。

Bash不提供從先前執行的命令中呼叫任何輸出的機制。如果您打算在任何後續命令中對其進行操作,則必須明確擷取它。

Q2:我想知道最簡單的方法,使用一個需要複製和粘貼第一個輸出校驗和的命令。(簡單地嘗試在雙引號粘貼校驗和(即作為字元串)上使用 grep 是行不通的。)

因此,您唯一的選擇是複制/粘貼上一個命令的輸出。關於為什麼當你嘗試它時這對你不起作用。這可能會失敗,因為當您使用echo <sha1sum>時引入了一個額外的字元,一個換行符 ( \n),它改變了校驗和字元串。

當將字元串回顯到任何散列函式時,md5或者sha256sum通常最好執行一個echo -n <..>告訴echo省略在字元串末尾附加換行符的操作。

您可以看到這如何影響對雜湊函式的任何呼叫,如下所示:

$ echo "blah" | sha256sum
41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3  -

$ echo -n "blah" | sha256sum
8b7df143d91c716ecfa5fc1730022f6b421b05cedee8fd52b1fc65a96030ad52  -

字元串 ‘blah’ 的真正散列是第二次呼叫。

您可以在您的.bashrcor.zshrc配置中創建一個簡單的函式並按以下方式執行它:

sha256 <expected-sha-256-sum> <name-of-the-file>

它將在單個命令中將預期的 sha256 總和與實際的總和進行比較。

功能是:

sha256() {
   printf '%s %s\n' "$1" "$2" | sha256sum --check
}

在此處找到更多詳細資訊

引用自:https://unix.stackexchange.com/questions/464010