SHA-1 是一個由 NIST FIPS 180-4 定義的 160 位元雜湊函式,它會將任何輸入——無論是短字串還是最大 100 MB 的檔案——轉換成固定 40 字元的十六進位摘要,內容完全對應您所提供的位元組。該演算法會對輸入進行填補,將其切分為 512 位元的區塊,並透過每個區塊 80 輪的運算更新五個 32 位元的狀態字,最終產生二十個摘要位元組。Sha1 雜湊產生器會在您的瀏覽器分頁內執行此計算,並以小寫 Hex 或標準填補 Base64 格式回傳結果,且絕不會將輸入傳送至遠端伺服器。由於演算法是對原始位元組進行雜湊,您訊息中的每一個字元——包含空格以及結尾的換行字元——都會參與計算,這就是為什麼外觀相似的輸入往往會產生截然不同的摘要。
「如何計算 sha1 雜湊」背後的讀者任務,幾乎總是下列兩種之一:重現已發布的檢查碼以確認下載檔案是否完整,或是比對舊文件中、廠商清單裡或 Git 提交物件中既有的 SHA-1 指紋。這兩種情境都將雜湊視為精確位元組的指紋,而非安全性證明。本文將逐步說明該函式實際輸出的內容、如何對文字或檔案執行它、為何編碼選擇很重要,以及該演算法在哪些情況下已不再安全使用。

SHA-1 產生了什麼,以及它仍然適用的場合
SHA-1 摘要長度為二十個位元組。該工具會將同樣的二十個位元組以兩種方式呈現:一次為小寫十六進位(正好 40 字元,0–9 與 a–f),另一次為標準填補 Base64(正好 28 字元)。底層的位元組完全相同——僅有編碼不同。空輸入本身就是一則有效的訊息;其眾所周知的 SHA-1 指紋為 da39a3ee5e6b4b0d3255bfef95601890afd80709。若您在檢查碼清單中看到該字串,表示發布者正在雜湊一個長度為零的檔案。
SHA-1 自 1995 年起便是 NIST 安全雜湊標準的一部分,至今仍嵌入於舊版的下載頁面、封存目錄、版本控制系統以及許多舊式整合之中。這種持續存在正是您仍可能需要它的主要原因:接收端系統已儲存 SHA-1 參考值,因此您必須產生一個以便進行比對。請將此比對視為偵測意外傳輸損毀的方式,而非證明該檔案來自可信作者的依據。
如何從文字或檔案計算 SHA-1 雜湊
- 在瀏覽器中開啟 Sha1 雜湊產生器。該頁面會在本機端讀取並處理輸入;不會上傳任何內容。
- 選擇與您的來源相符的輸入模式。若您有字串需要建立指紋,請選擇文字模式;若您需要精確檔案位元組的摘要,請選擇檔案模式。
- 將字串貼入文字欄位,不要修剪前導或尾隨空白;或使用檔案選擇器挑選一個最大 100 MB 的檔案。100 MB 的上限是瀏覽器能一次保留的緩衝區最大值;它並非能處理數 GB 影像的命令列工具串流替代方案。
- 點擊按鈕以計算摘要。請等待頁面顯示結果——小寫 Hex 與填補 Base64 格式會一併出現。
- 複製舊系統所預期的編碼格式。多數檢查碼清單發布的是 Hex;部分較舊的 API 接受 Base64。兩者皆為同一 20 個摘要位元組的不同編碼。
- 將每個字元與您透過可信管道取得的參考值進行比對。若完全相符,表示您處理的位元組與發布者雜湊的位元組相同;若不相符,代表輸入、編碼或傳輸過程中有某個環節被改動了。
SHA-1 vs SHA-256 vs SHA-512
當您能掌控接收端系統時,請優先選用協定所允許的最強演算法。NIST 所定義的三種安全雜湊標準變體,在輸出大小、區塊大小以及內部狀態字數量上有所不同。下表中的數值取自 FIPS 180-4 規範。
| 屬性 | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|
| 輸出大小(位元) | 160 | 256 | 512 |
| 輸出大小(Hex 字元數) | 40 | 64 | 128 |
| 輸出大小(Base64 字元數) | 28 | 44 | 88 |
| 區塊大小(位元) | 512 | 512 | 1024 |
| 狀態字數量(× 32 位元) | 5 | 8 | 16 |
| 每區塊的運算輪數 | 80 | 64 | 80 |
| 碰撞狀態 | 實際上已被破解 | 無實際碰撞 | 無實際碰撞 |
Hex 與 Base64 的字元數僅是輸出大小的簡單結果:每個十六進位數字承載 4 個位元,每 4 個 Base64 字元則承載 3 個位元組加上填補。基於瀏覽器的 SHA-256 或 SHA-512 工具會回傳更長的字串,但工作流程相同。若您能將舊有的 SHA-1 參考值替換為 SHA-256,請立即執行,並停止為新版本發布較弱的指紋。
為何空白、編碼與換行會改變結果
SHA-1 雜湊的是位元組,而非可見字元。這個單一規則即可解釋初學者在將「相同」文字貼入兩個工具卻得到不同摘要時所遇到的大部分困惑。
- UTF-8 長度會造成影響。文字模式會在雜湊前將可見字串編碼為 UTF-8。像 é 這類帶有腔調的字母佔 2 個位元組,一個 CJK 表意文字佔 3 個,而像 🚀 這類表情符號則佔 4 個。在螢幕上看起來相同的兩個字串,根據正規化方式、隱藏字元或編輯器儲存檔案的方式不同,可能會有不同的位元組序列。
- 空白並非免費。空格、定位字元以及結尾的換行字元皆為位元組。從網頁貼上文字時,常常會一併帶入不可見的尾端換行字元,使得雜湊結果與您手動輸入的版本不同。
- 換行字元有所不同。在 Windows 上儲存的檔案使用 \r\n 換行;在 Unix 或 macOS 上儲存的檔案則使用 \n。即使可見的行內容完全相同,這多出的 2 個位元組仍會改變整個檔案的 SHA-1。
- 檔案模式會略過編碼。當您選擇檔案時,該工具會以瀏覽器讀取到的原始位元組進行雜湊。檔名、修改時間與 MIME 標籤皆不會納入摘要——僅有檔案內容會計入。
若您計算出的值與參考值不一致,首要檢查的是輸入是否真的位元組完全相同。請在十六進位編輯器中開啟來源檔,或將同一緩衝區送入 openssl sha1 再次比對。
比對已下載檔案與已發布的檢查碼
現今計算 SHA-1 雜湊最常見的原因,是驗證下載的封存檔是否符合廠商所發布的值。整體工作流程相當簡單:
- 透過您信任的管道取得預期的 SHA-1 指紋——理想上是 HTTPS 連至廠商網站、帶外訊息或已簽署的清單。若該頁面本身可能遭到竄改,切勿從同一頁面複製檢查碼與下載檔案。
- 下載檔案並保持其原始狀態。在進行雜湊前請勿解壓縮、轉檔或重新命名,因為任何位元組的修改都會改變摘要。
- 開啟 Sha1 雜湊產生器,切換至檔案模式,並選取下載的封存檔。請保持在 100 MB 的瀏覽器限制內;若檔案較大,請使用本機命令列工具,例如 sha1sum 或 openssl dgst -sha1。
- 讀回 40 字元的 Hex 結果,並將每個字元與參考值進行比對。完全相符代表您收到的位元組正是發布者所雜湊的位元組——僅此而已。
此檢查能偵測因傳輸錯誤、下載不完整或鏡像同步問題所引起的意外損毀。但它無法證明該檔案可安全執行,因為 SHA-1 已出現碰撞破解,攻擊者在現實條件下能夠偽造兩個具有相同摘要的不同封存檔。若完整性對安全性至關重要,請將廠商升級至 SHA-256 或 SHA-512,並透過經驗證的管道發布新的檢查碼。
何時 SHA-1 是錯誤的工具
SHA-1 的某些用途看似完整性檢查,實際上卻是安全性聲述,而 SHA-1 已無法支援這些用途。請將以下任何一種情況視為需要更強基礎機制的警訊:
- 數位簽章與憑證。攻擊者可以建構兩個具有相同 SHA-1 摘要的不同訊息。根據 RFC 6194,此特性代表 SHA-1 不得用於需要抗碰撞性的場合。
- 密碼儲存。對密碼直接進行 SHA-1 雜湊不僅運算快速,也容易遭受現代硬體的攻擊。帳號系統應採用加鹽且刻意緩慢的密碼雜湊機制,例如 Argon2id、scrypt 或 bcrypt。此產生器不會加入鹽值,也未進行金鑰延伸。若您需要正確地雜湊密碼,請閱讀 如何輕鬆產生密碼雜湊 中的實務步驟,並遵循該帳號系統本身的實作方式,而不是使用通用的線上工具。
- 對抗性檔案的竄改偵測。「若 SHA-1 符合則核准此次上傳」這種設計本身就已經被破解。請改用伺服器端搭配 SHA-256 或更強演算法的簽章機制,並將驗證繫結至伺服器所掌控的金鑰。
- 任何新設計中的用途。若您現正挑選雜湊演算法,而接收端系統接受 SHA-256,請選擇 SHA-256。更長的摘要所帶來的成本微不足道;碰撞破解所帶來的成本卻是永久的。
Sha1 雜湊產生器是為 SHA-1 為必要舊格式的狹窄且合法的情境所打造。請用於重現檢查碼、逐字元與參考值比對,並在周邊系統允許時,立即將儲存值遷移至 SHA-256 或更強的演算法。
若想深入了解,請參閱 在 Java 中產生 SHA-256 雜湊:程式碼與瀏覽器方法。