Windows 使用者可以透過三種內建或瀏覽器的方式產生 SHA-1 雜湊值,無需安裝新軟體。命令提示字元工具 CertUtil 可以使用語法 certutil -hashfile(後接路徑與演算法名稱)從任何本機檔案產生 SHA-1 摘要,而 PowerShell 提供更靈活的 Get-FileHash cmdlet,會回傳相同的 160 位元值作為物件,您可以將其串接、比較或匯出。對於需要雜湊短文字字串,或在限制終端機存取的 Windows 機器上工作的使用者,瀏覽器型的 SHA-1 產生器完全在瀏覽器分頁內執行,可讀取 UTF-8 文字或最大 100 MB 的檔案位元組,並以小寫十六進位或標準填補的 Base64 形式回傳摘要。只要輸入相同,這三種方法都會產生相同的值,因為 SHA-1 在 NIST FIPS 180-4 中有明確規範,並且作用於位元組序列而非檔名、時間戳記或 MIME 標籤。選擇哪種方式取決於您是否已開啟終端機、您要比對的值是以十六進位還是 Base64 發佈,以及該校驗碼是否來自仍與新演算法並存發佈 SHA-1 的舊版下載頁面。

SHA-1 摘要的外觀以及 Windows 仍使用它的原因
SHA-1 是由 NIST 安全雜湊標準定義的密碼學雜湊函式。它接受任何輸入位元組序列,並產生固定的 160 位元值,顯示為恰好 40 個十六進位字元或 28 個含尾端填補的 Base64 字元。Windows 使用者仍會遇到 SHA-1,因為較舊的軟體目錄、封存的發行套體、韌體映像檔以及長期運作的整合系統,都會與 SHA-256 值並存發佈 SHA-1 校驗碼。當驗證工具要求「SHA-1」並提供一個 40 字元的十六進位字串時,其底層期望就是您能從相同的位元組重現出該字串。
摘要僅取決於位元組。檔名、修改時間戳記、Windows 檔案總管的 MIME 標籤,以及使用者帳號都不參與計算。即使其中一個檔案昨天才重新命名、另一個在 2009 年複製,位元組相同的兩個檔案會產生相同的摘要。
在 Windows 命令提示字元中產生 SHA-1 雜湊值
Windows 隨附的 CertUtil 是憑證服務工具,但它同時也兼作檔案雜湊工具,支援包括 SHA-1 在內的多種演算法。當您已開啟命令提示字元並需要一次性摘要時,這是最快的途徑。
- 按下 Win + R,輸入 cmd,然後按 Enter 開啟命令提示字元。在 Windows 11 上,您也可以在「開始」按鈕上按右鍵並選擇 Terminal,以獲得更現代化的介面。
- 輸入 cd 後接完整路徑以切換至包含該檔案的資料夾,例如 cd "C:\Users\YourName\Downloads"。
- 輸入 certutil -hashfile "filename.ext" SHA1 並按 Enter。將 filename.ext 替換為實際的檔案名稱(包含副檔名)。
- 讀取輸出的第二行。該行會以大寫十六進位顯示 SHA-1 摘要。其上一行則確認所套用的演算法。
- 複製該 40 字元的十六進位值,並與發佈的校驗碼逐字元比對。十六進位比對不區分大小寫。
CertUtil 僅接受檔案,不接受任意文字。如果您需要雜湊一個短字串,請先將其儲存為暫存檔,或改用 PowerShell 或瀏覽器工具。
在 Windows 的 PowerShell 中產生 SHA-1 雜湊值
PowerShell 的 Get-FileHash cmdlet 是更靈活的內建選項。它支援 SHA-1、SHA-256、SHA-384 與 SHA-512,並回傳一個結構化物件,包含 Hash、Algorithm 與 Path 屬性,可串接至其他指令。
- 從「開始」功能表開啟 PowerShell,或按下 Win + X 並選擇 Windows PowerShell(在 Windows 11 上則選擇 Terminal)。
- 輸入 Get-FileHash -Path "C:\Users\YourName\Downloads\filename.ext" -Algorithm SHA1 並按 Enter。
- 讀取 Hash 欄。輸出預設為大寫十六進位。若比對時需要小寫格式,可以使用 .ToLower() 進行轉換。
- 若要以程式方式比對,可將摘要存入變數並使用 -eq 運算子:$published = "DA39A3EE..."; (Get-FileHash ...).Hash -eq $published,只有在每個字元都相符時才會回傳 True。
- 若要雜湊內嵌字串而不儲存成檔案,請使用 .NET 方法:$bytes = [System.Text.Encoding]::UTF8.GetBytes("your text"); $sha1 = [System.Security.Cryptography.SHA1]::Create().ComputeHash($bytes); [BitConverter]::ToString($sha1) -replace "-","" 即可得到 40 字元的摘要。
Get-FileHash 在路徑以引號包裹時能正確處理包含空格的內容,並接受管線輸入,因此您可以使用單一 Get-ChildItem | Get-FileHash 指令一次雜湊資料夾中的多個檔案。
在 Windows 上使用瀏覽器工具雜湊文字或檔案
當終端機存取受限、需要雜湊短字串而不儲存暫存檔,或發佈的校驗碼是以 Base64 而非十六進位提供時,瀏覽器型工具通常是對 Windows 最友善且最快的選擇。Sha1 Hash Generator 完全在瀏覽器分頁內執行。它接受 UTF-8 文字字串或最大 100 MB 的本機檔案,並回傳相同的 20 位元組摘要,編碼為小寫十六進位或標準填補的 Base64。
該工具不會上傳檔案或文字。瀏覽器在本機讀取選取的位元組,套用 FIPS 180-4 定義的 SHA-1 演算法,然後顯示結果。這使得它可用於包含敏感設定、授權金鑰或個人資料的檔案,因為這些位元組從未離開本機。
對於含腔調字元、表情符號或非拉丁文字,文字模式很重要,因為每個字元可能佔用多個 UTF-8 位元組。檔案模式則完全按照作業系統讀取的方式雜湊原始位元組,因此檔名、修改時間與 Windows MIME 標籤皆不會納入摘要計算。
比對已下載的 Windows 檔案與其發佈的 SHA-1
在 Windows 上產生 SHA-1 雜湊值最常見的原因,是確認下載的檔案完整無缺。許多舊版封存頁面、韌體儲存庫與軟體鏡像仍會在下載連結旁發佈 SHA-1 字串,下方的工作流程完整涵蓋此情境。若想更深入了解舊版校驗碼驗證,請參閱在瀏覽器中為舊版校驗碼產生 SHA-1 雜湊值。
- 下載檔案後,開列出發佈校驗碼的頁面,找出以檔名或 SHA-1 標籤開頭的那一行。將 40 字元的十六進位值複製到剪貼簿。
- 開啟命令提示字元,切換至下載資料夾,然後執行 certutil -hashfile "filename.ext" SHA1。將 filename.ext 替換為實際下載的檔案名稱。
- 讀取輸出的第二行,其中包含大寫十六進位摘要。
- 以肉眼或使用能突顯差異的工具來比對這兩個值。相符表示該檔案的位元組與發佈者雜湊的內容完全一致;不相符則表示下載被截斷、損毀或遭到替換。
- 若該頁面以 Base64 發佈校驗碼,請改用能回傳 Base64 輸出的方法,或使用編碼工具將十六進位摘要轉換。
比對必須逐字元進行,且不得對空白字元進行標準化。多一個空格、一個連字號,或少一個字元,都代表檔案不相符。
為何 Windows 的行尾、BOM 與尾端空白會改變摘要
若干 Windows 特有的行為可能產生看似正確但實際令人意外的摘要。
行尾
Notepad 寫入的 Windows 檔案使用 CRLF 行尾,而許多源自 Unix 的工具僅預期 LF。即使僅有單一行尾差異,也會改變位元組序列,進而改變 SHA-1。在與發佈值比對時,請以收到時的原始位元組為準進行雜湊。
BOM
部分 Windows 編輯器會以位元組順序標記 (BOM) 儲存 UTF-8 檔案,該標記為三個位元組 EF BB BF。BOM 是檔案的一部分,會計入摘要。若發佈者在沒有 BOM 的情況下雜湊該檔案,即使可見文字相同,您的雜湊值也不會相符。
尾端換行與空格
Notepad 與許多 Windows 工具會附加一個在編輯器中看不見的結尾換行。32 字元的密碼與同樣 32 字元但後接 Enter 的密碼會產生不同的摘要。空輸入同樣是有效的訊息:空文字欄位的 SHA-1 為眾所周知的值 da39a3ee5e6b4b0d3255bfef95601890afd80709。
大小寫
SHA-1 內部產生小寫位元組,但 Windows 工具通常以大寫顯示摘要。這兩種表示描述相同的值,但若不先統一大小寫,進行字面字串比對將會失敗。
何時應在 Windows 上從 SHA-1 改用 SHA-256
SHA-1 已被證實會發生碰撞。研究人員已展示能構造出不同內容卻產生相同摘要的實際攻擊,RFC 6194 詳載相關安全性考量。這代表 SHA-1 相符不應被視為作者身分證明、憑證可信的訊號、密碼驗證機制,或任何對抗性工作流程中的防竄改保護。
SHA-1 相符仍有一項狹隘用途:當雙方使用相同位元組序列、威脅模型為損毀而非替換時,用於偵測意外傳輸損壞。這涵蓋了大多數舊版校驗碼的使用情境。
若您掌控發佈或儲存校驗碼的系統,請將參考值遷移至 SHA-256 或更強的演算法,並透過經認證的管道發佈新校驗碼。SHA256 Hash Generator 提供相同的瀏覽器本機工作流程,產生 256 位元摘要。對於密碼儲存,請使用加鹽且刻意耗能高的方案,例如 Argon2id、scrypt 或 bcrypt,並由帳號系統而非通用雜湊工具來實作。
| Windows 上的方法 | 輸入類型 | 輸出格式 | 是否需要終端機 | 是否需要安裝 |
|---|---|---|---|---|
| CertUtil (CMD) | 僅本機檔案 | 大寫十六進位 | 是 | 否 |
| Get-FileHash (PowerShell) | 本機檔案或管線位元組 | 大寫十六進位 | 是 | 否 |
| 瀏覽器型 SHA-1 工具 | UTF-8 文字或不超過 100 MB 的本機檔案 | 小寫十六進位或填補的 Base64 | 否 | 否 |
由於 SHA-1 始終產生 160 位元摘要,三種方法的輸出大小完全相同。格式選擇(十六進位對 Base64,以及大寫對小寫)僅影響摘要的顯示方式,且必須與接收端系統所期望的格式相符。