目錄
一、什麼是「雜湊」?用一句話講清楚
雜湊(Hash)是把任何大小的資料,透過「單向演算法」壓成一段固定長度的指紋。同一份檔案永遠得到同一個雜湊值;內容就算只改 1 個位元,雜湊值也會「大翻盤」。這個特性讓雜湊成為檔案完整性驗證、版本比對、資料去重與資安檢核的基礎工具。
二、為什麼要看雜湊?三個最實用的場景
| 場景 | 怎麼做 | 帶來的保障 |
|---|---|---|
| 驗證下載檔沒被掉包 | 下載後用本機算 SHA-256,對照官方公布的值 |
內容一致 → 傳輸途中未被更改或置換 |
| 快速比對兩個檔案是否相同 | 分別計算雜湊,比對兩串指紋 | 秒判斷是否同一版本、是否重複 |
| 事件調查與回報 | 回報檔案的 SHA-256 給廠商或資安團隊 |
可精準鎖定同一份檔案、建立追蹤紀錄 |
三、常見雜湊演算法:該選哪一個?
- MD5:速度快,但已出現碰撞(兩份不同內容得到同一雜湊)。不建議用於安全性驗證。
- SHA-1:安全性亦不足(已有實證碰撞)。不建議。
- SHA-256 / SHA-512(SHA-2 家族):目前最常見、可靠度高,建議首選。
- SHA-3(Keccak):新一代設計,需求或政策要求時可採用。
四、通用流程:下載檔如何「正確比對」雜湊
- 先找官方公布的雜湊值:在官網下載頁或發佈頁,找到該檔案的
SHA-256。 - 在本機計算雜湊:用系統內建工具(Windows PowerShell、macOS / Linux 終端機)。
- 逐字比對:比對長度與每一個十六進位字元(不分大小寫)。
- 不一致怎麼辦?:重新下載(換網路/瀏覽器),避免下載器;仍不一致就停止安裝、聯繫廠商。
- 更嚴謹:同時檢查「程式碼簽章」與執行離線掃描。
五、Windows 實作(PowerShell):算 SHA-256 與驗證簽章
在檔案所在資料夾按住 Shift+右鍵選「在這裡開啟 PowerShell」,或在「開始」搜尋 PowerShell 進入。
1)計算 SHA-256
Get-FileHash .\安裝檔名稱.exe -Algorithm SHA256
輸出會包含 Algorithm、Hash、Path。其中 Hash 就是你要比對的 64 位十六進位字串。
2)驗證程式碼簽章(加分但很重要)
Get-AuthenticodeSignature .\安裝檔名稱.exe | Format-List *
重點欄位:
- Status 應為
Valid - SignerCertificate.Subject:發行者名稱(應與官方一致)
- TimeStamperCertificate:通常會有時間戳服務(代表簽章時間)
3)多檔案批次計算
Get-ChildItem *.exe | Get-FileHash -Algorithm SHA256 |
Format-Table Path, Hash
六、macOS 實作(終端機):shasum -a 256
開啟「終端機」,切到檔案所在資料夾:
cd ~/Downloads
shasum -a 256 安裝檔名稱.dmg
輸出為:雜湊值 空格 檔名。將雜湊值與官方公布的比對即可。
sha256sum:brew install coreutils
sha256sum 安裝檔名稱.dmg
七、Linux 實作:sha256sum 與批次比對
1)單一檔案
sha256sum install-file.tar.xz
2)批次檔案
sha256sum *.AppImage
3)比對官方提供的 .sha256 清單
許多發行版會提供 檔名.sha256 清單,可直接檢核:
sha256sum -c 檔名.sha256
# OK 代表比對成功;FAILED 代表不一致
八、常見陷阱與除錯:為什麼雜湊對不起來?
- 比到錯檔:官方雜湊對應的是「完整安裝檔」,你卻拿「下載器(stub)」去比,必然不一致。
- 大小寫、空白:雜湊值大小寫不影響,但請勿多貼空白或換行;也別漏掉開頭或結尾幾個字元。
- 重新封裝:Zip 檔解壓後的單一檔案雜湊,當然與整個 Zip 的雜湊不同;要比就比同一個檔。
- 下載過程被攔截改導:公用 Wi-Fi、瀏覽器外掛、代理可能替你換了鏡像;換條線、換個瀏覽器重下。
- CDN 版本切換:官方在同一路徑替換了版本,但網頁尚未更新雜湊值。等官網更新或向窗口索取最新雜湊。
- MD5 / SHA-1 遺留:老頁面只給 MD5/SHA-1,不建議作為安全依據;至少找 SHA-256。
- 文字檔跨系統換行:TXT 在 Windows(CRLF)與 Unix(LF)換行不同,雜湊自然不同;這是正常現象。
九、進階:.sha256 清單、批次驗證與自動化
1)自行產生 .sha256 清單(Linux / macOS)
sha256sum *.zip > myfiles.sha256
# 之後可用
sha256sum -c myfiles.sha256
2)Windows 批次比對:用 PowerShell 產出與驗證
產出清單:
Get-ChildItem *.msi | ForEach-Object {
$h = Get-FileHash $_.FullName -Algorithm SHA256
"$($h.Hash) *$($_.Name)"
} | Set-Content myfiles.sha256
驗證(簡易比對):
# 讀清單逐一比對目前資料夾檔案
Get-Content .\myfiles.sha256 | ForEach-Object {
$parts = $_ -split '\s+\*'
$hashExpect = $parts[0]
$name = $parts[1]
if(Test-Path $name){
$hashActual = (Get-FileHash $name -Algorithm SHA256).Hash
if($hashActual -ieq $hashExpect){ "{0} OK" -f $name } else { "{0} FAILED" -f $name }
} else {
"{0} MISSING" -f $name
}
}
3)搭配簽章檢查(Windows)
Get-ChildItem *.exe | ForEach-Object {
$sig = Get-AuthenticodeSignature $_.FullName
"{0}`t{1}" -f $_.Name, $sig.Status
}
十、FAQ:雜湊 vs. 加密、MD5 還能用嗎、只下載未執行會中毒?
Q:雜湊跟「加密」一樣嗎?
A:不一樣。雜湊是單向的「指紋」,無法反推原文;加密是可逆的,重點是保密與授權解密。
Q:只提供 MD5 可以嗎?
A:不建議作為安全依據。MD5 與 SHA-1 都曾被攻破(可產生碰撞)。若只有 MD5,至少再找 SHA-256;找不到就不要把「一致」當成安全保證。
Q:SHA-256 會不會也有碰撞?
A:理論上可能,但以目前計算能力與研究進展,實務上仍被視為可靠。對一般下載驗證來說,足夠。
Q:有人能「改過檔案,卻讓 SHA-256 還是一樣」嗎?
A:對攻擊者而言是極難的(稱作「第二原像攻擊」)。所以我們才選擇 SHA-256 這類抗碰撞設計的演算法。
Q:只下載、未執行 EXE,會中毒嗎?
A:通常不會。雜湊不會讓檔案自動執行;但若掃描報告顯示惡意特徵,依內部流程仍要先隔離、驗證,再決定是否刪除或提交樣本。
Q:官方頁面顯示的 SHA-256 跟我算出來不同,但重新下載後就一樣了,這正常嗎?
A:可能是下載過程中斷或 CDN 節點尚未同步。確定一致後再進行安裝即可;若屢次不一致,要聯繫官方。
Q:要把雜湊值公開到網路上嗎?
A:若是開源或公開發佈,通常會;企業內部檔案則視保密等級。重點是:雜湊值本身不含機密內容。
十一、下載前後安全檢查清單(快速版)
- 僅從官方頁面下載,避免第三方轉載或不明「加速器」。
- 先找到官方公布的 SHA-256。
- 下載後,用系統工具本機計算雜湊。
- 比對完全一致,且(若有)程式碼簽章為 Valid、發行者正確。
- 若你的資安工具仍警示:先隔離、留存雜湊與檔案、做離線掃描、再與廠商確認是否誤報。
十二、結語與延伸閱讀
雜湊不是高深理論,它是在下載、部署、事件通報中每天都會用到的「檔案指紋」。把「先找官方 SHA-256 → 本機計算 → 嚴格比對 →(選配)看簽章」變成習慣,就能大幅降低被掉包與供應鏈攻擊的風險,也能在發生疑慮時迅速與對方對齊證據、釐清狀況。
