SHA-1 是一個由 NIST FIPS 180-4 標準化的 160 位元加密雜湊函式,若要在 Linux 上產生 SHA-1 雜湊值,你可以使用命令列工具(例如 sha1sum),或是開啟一個完全在本機分頁中執行的瀏覽器型產生器。當你正在使用的 Linux 機器受到嚴格限制、不想安裝額外工具,或只是需要驗證從說明文件頁面貼過來的校驗和、而不想把檔案送進終端機時,瀏覽器的方式就很方便。摘要本身的長度永遠剛好是 20 位元組,並以 40 個小寫十六進位字元或 28 個標準 Base64 字元(含任何填補字元)來表示。SHA-1 會對輸入的原始 UTF-8 位元組進行雜湊,因此即使可見文字看起來一模一樣,一個換行字元、尾端空白,或帶腔調字元的編碼方式,都可能改變產生的結果。本指南將逐步說明如何使用瀏覽器工具在 Linux 上產生 SHA-1 雜湊值、兩種輸出格式的實際意義,以及 SHA-1 在現代工作流程中與其更強大兄弟演算法的相對位置。

Linux 使用者在實務上會在哪裡遇到 SHA-1
SHA-1 並未從 Linux 工作流程中消失;它只是遷移到了幾個老舊的角落。較舊的套件儲存庫仍會在 tarball 旁邊發布一個 .sha1sum 檔案,而這些參考有時是某個封存版本唯一可取得的校驗和。在 SHA-256 轉換之前建立的長生命週期 Git 儲存庫,其 commit 與 tree 物件可能仍以 SHA-1 來引用,而與這些物件互動的工具需要相符的摘要才能驗證資料。嵌入式韌體更新、業餘愛好者的單板電腦映像檔,以及工業級 Linux 發行版,偶爾會綁定 SHA-1 清單,因為其建置流程早於現代的轉換。從大學鏡像站下載的磁碟映像、已停產發行版的 ISO 封存檔,以及歷史性的容器層,都會在隨附的說明中帶著 SHA-1 指紋。
除了下載之外,SHA-1 也出現在較舊 TLS 鏈中的憑證指紋、舊式資料庫的資料列識別碼,以及早於更強演算法的去重複系統中。這些情境都有一個共同模式:第三方發布一個摘要、你手上握有位元組,問題在於兩者是否相符。答案永遠取決於演算法是否收到發布者所雜湊的完全相同位元組序列,而這正是一個乾淨的瀏覽器內產生器能發揮價值的地方。
逐步在 Linux 上產生 SHA-1 雜湊值
在 Linux 桌面上取得 SHA-1 摘要的最快途徑,是一個在本機執行計算的瀏覽器工具。Sha1 Hash Generator 接受 UTF-8 文字或上限 100 MB 的檔案,並回傳同一個 20 位元組摘要的兩種常見編碼,無需上傳步驟。
- 在 Linux 桌面或具有圖形界面的無頭工作站上,於平常使用的瀏覽器中開啟 Sha1 Hash Generator。
- 選擇文字模式或檔案模式。文字模式在雜湊前會將可見字串編碼為 UTF-8,這一點對帶腔調字母、表情符號及非拉丁字母腳本很重要,因為單一字元可能佔用好幾個位元組。
- 貼上或輸入確切的輸入內容。不要正規化空白、不要去除尾端換行,也不要讓編輯器重新排版文字。行尾字元、空格以及最末的換行全都會參與摘要計算。
- 在檔案模式下,挑選一個上限 100 MB 的本機檔案。瀏覽器會透過標準檔案 API 讀取位元組,所選檔案不會被傳送到應用程式伺服器。
- 點擊產生按鈕。空白的文字欄位是合法的訊息,其 SHA-1 值為眾所周知的 da39a3ee5e6b4b0d3255bfef95601890afd80709;空白的結果與尚未點擊按鈕是不同的。
- 選擇舊式系統所需的表示法。Hex 為 40 個小寫字元;Base64 為 28 個含填補的標準字元,編碼同一個 20 位元組。
- 透過可信的管道逐字元比對,例如經簽署的發行頁面、帶外電子郵件,或透過不同傳輸方式取得的校驗和檔案。任何一個字元不符就代表位元組不相符。
解讀輸出:Hex 與 Base64 格式
SHA-1 摘要是固定的 20 位元組,與輸入大小無關,因此在 Hex 與 Base64 之間的選擇,純粹取決於這 20 個位元組要以何種方式書寫以便傳輸。Hex 將每個位元組以兩個字元表示,使用數字 0 到 9 與字母 a 到 f,這就是為何在本工具中每個摘要都剛好是 40 個小寫字元。Base64 使用包含 64 個可列印符號的較大字母集加上填補,同樣的 20 位元組會壓縮成 28 個字元,含任何尾端的等號。許多舊式校驗和檔案發布的是 Hex,而某些 API 與 shell 管線則發布 Base64,因為它較短且能存活於某些傳輸編碼。
| 屬性 | 小寫 Hex | 標準 Base64 |
|---|---|---|
| 輸出字元數 | 40 | 28(含填補) |
| 表示的位元組數 | 20 | 20 |
| 字元集 | 0-9 與 a-f | A-Z、a-z、0-9、+、/、= |
| 區分大小寫 | 是(此處一律小寫) | 是 |
| 常見來源 | .sha1sum 檔案、Git、套件清單 | API、電子郵件安全校驗和、精簡紀錄 |
| 空輸入值 | da39a3ee5e6b4b0d3255bfef95601890afd80709 | 2jmj7l5rSw0yVb/vlWAYkK/YBwk= |
驗證時,挑選與發布者所發布相符的表示法,並逐字元比對。Hex 與 Base64 之間的轉換是一個可逆的編碼步驟,並不會改變底層的位元組。
為何外觀相同的輸入會產生不同的摘要
SHA-1 是決定性且位元級精確的,這代表兩個僅在單一位元組上有差異的輸入,必定會雜湊出截然不同的摘要。在 Linux 上,有幾種常見情況會讓人踩到這個陷阱。第一個是文字編碼:以 Latin-1 撰寫的可見字串 café,與以 UTF-8 撰寫的同一個字串擁有不同位元組,而只有 UTF-8 的位元組序列會與在現代系統上雜湊出來的參考值相符。第二個是行尾字元。以 Unix 行尾字元儲存的檔案使用單一位元組 0x0A,而以 Windows 行尾字元儲存的檔案則使用兩位元組序列 0x0D 0x0A。在 Windows 工具中編輯檔案、再拿去與在 Linux 上產生的校驗和比對,是典型的錯配來源。
第三個是不可見字元。檔案開頭的 UTF-8 位元組順序標記、編輯器自動加上的尾端換行、Tab 與一連串空格之間的差異,甚至零寬度 Unicode 標記,全都會改變位元組流,進而改變摘要。第四個是檔名與中繼資料雜訊,雖然本工具刻意將其排除:檔名、最後修改時間以及瀏覽器的 MIME 標籤都不會納入摘要,因此在兩個資料夾之間搬移檔案並不會改變結果。結論是:要雜湊與發布者所雜湊的相同位元組序列、相同的編碼,中間不做任何正規化。
SHA-1、SHA-256 與 SHA-512 的比較
SHA-1 屬於由 NIST 安全雜湊標準所定義的一系列演算法,選擇哪一個取決於接收端系統所預期的內容。下表摘錄了各者的官方輸出大小與現行安全態勢,定義來自 NIST FIPS 180-4,並於 RFC 6194 中加以討論。
| 演算法 | 輸出位元數 | Hex 長度 | Base64 長度 | 現行態勢 |
|---|---|---|---|---|
| SHA-1 | 160 | 40 | 28 | 碰撞已遭破解;僅供舊式校驗和相容之用 |
| SHA-256 | 256 | 64 | 44 | 新設計的標準現代選擇 |
| SHA-512 | 512 | 128 | 88 | 64 位元系統上的高強度現代選擇 |
在 Linux 上,產生以上任一種都很簡單。sha1sum、sha256sum 與 sha512sum 都隨 coreutils 一起出貨,接受檔名或從標準輸入讀取。當你需要視覺化的確認、不想進入 shell,或是作業系統上沒有這些工具時,瀏覽器工具就是合適的選擇。若想針對同一個 Linux 工作流程並排檢視更強的演算法,在 Linux 系統上計算 SHA-512 雜湊值的指南詳細介紹了命令行做法。
相符的 SHA-1 摘要能證明什麼、又不能證明什麼
相符的摘要只能回答一個問題:這台機器上的位元組是否與原先被雜湊的位元組逐位元組相符。在這個有限的範疇內,它確實有用。下載損壞、傳輸截斷、部分寫入以及意外編輯,全都會改變位元組,進而改變摘要,因此仔細的比對能抓出傳輸過程中的意外損壞。
相符摘要無法證明的事反而更重要。SHA-1 在現實的攻擊條件下碰撞已被破解,這代表能控制輸入的攻擊者,可以建構出兩個擁有相同摘要的不同檔案。因此,SHA-1 相符並不能證明作者身分、不能用來判定檔案是否安全、無法驗證簽章,也無法防範由事先準備內容的人所進行的蓄意竄改。它並非密碼雜湊函式,因為快速的通用演算法讓攻擊者能非常快速地測試猜測值,而本工具從不加上 salt 或套用金鑰延伸機制。針對密碼儲存,帳號系統必須使用刻意耗能的功能,例如 Argon2id、scrypt 或 bcrypt。至於任何新協定、簽章機制、憑證流程或對抗式審批管線,請優先採用 SHA-256 或 SHA-512,並透過經認證的管道發布校驗和。
檔案大小限制與何時改用本機工具
本瀏覽器工具將檔案輸入上限設為 100 MB,因為所選輸入在摘要運算完成前必須以單一位元組緩衝存在。這個上限涵蓋了大部分的舊式封存檔、單一套件檔案與 ISO 片段,但排除了數 GB 級的磁碟映像與大型容器層。針對這類情況,請留在 Linux 主機上使用內建工具:sha1sum path/to/largefile 會產生與瀏覽器工具相同的 20 位元組摘要,而 sha1sum -c checksums.sha1 會將清單中的每一筆與磁碟上的檔案進行驗證。請務必確認本機工具收到的是哪個演算法以及哪段位元組序列,特別是當檔案是透過會重新編碼行尾字元或去除位元組順序標記的連線下載時。當 SHA-1 是必要的舊式格式時,在 Linux 上最安全的工作流程是:挑選正確的輸入模式、產生摘要、複製相符的 Hex 或 Base64 表示法,並在裁切或重新編碼來源之前完成比對。