ToolAct工具行動

檔案哈希校驗工具

計算檔案的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 哈希值

上傳檔案

拖拽檔案到此處

支援任意檔案類型和大小

選擇哈希演算法
MD5
128
SHA-1
160
SHA-256
256
SHA-384
384
SHA-512
512
校驗比對

什麼是檔案哈希?

檔案雜湊會用指定演算法把檔案內容計算成固定長度的摘要。同一個檔案在同一演算法下總會得到相同結果,而即使只改動一個位元組,也可能產生完全不同的雜湊值。它常用於校驗下載檔、比較備份、識別重複檔案、確認傳輸完整性,或與軟體發布頁和安全公告中的校驗值核對。本工具支援 MD5、SHA-1、SHA-256、SHA-384、SHA-512 等演算法。MD5 和 SHA-1 在舊流程中仍會出現,但不適合現代安全保證;需要可靠完整性校驗時通常應選 SHA-256 或更強演算法。雜湊值不能反推出原檔案內容。

如何使用

如何使用

  1. 將檔案拖曳至上傳區域,或點選「選擇檔案」按鈕
  2. 勾選要計算的雜湊演算法(可複選)
  3. 點選「計算雜湊」按鈕開始
  4. 計算完成後,可複製單一雜湊值或一次全部複製
  5. 驗證時,請在比較欄位輸入已知的雜湊值

驗證流程

  • 請在檔案下載或複製完成後再計算雜湊;檔案不完整或傳輸中斷會產生不同的值。
  • 與已發佈的校驗碼比對時,請從官方來源複製,並確認使用相同的演算法。

使用場景

從一次上傳計算多種檔案摘要拖入檔案並任意勾選 MD5(128 位元)、SHA-1(160 位元)、SHA-256(256 位元)、SHA-384(384 位元)、SHA-512(512 位元),即可在本機以進度回饋產生雜湊。檔案讀入記憶體後交給 crypto.subtle.digest(SHA 系列)或 JavaScript MD5 例程在瀏覽器內完成計算,二進位內容不會離開裝置,適合專有韌體、內部建置、未發布產物等場景。
對照已發佈的校驗碼進行驗證在計算前或計算後貼上預期的雜湊值,當其中一個產生的值與比對字串相符時,頁面會自動識別匹配的演算法。比對以標準化的小寫 Hex 進行,因此發佈者的大寫摘要和本機產生的小寫摘要無需手動重新輸入即可對齊。
在信任決策中使用更強的雜湊演算法MD5 和 SHA-1 適用於舊式檢查和重複偵測(兩者都已有公開的碰撞攻擊),但在下載驗證和防竄改方面,SHA-256 或更強的演算法是更安全的選擇。SHA-256 產生 64 字元的 Hex 摘要且尚無已知碰撞,SHA-384/512 為高保證發布流程提供更高層級的保障。對於非常大的發布成品,BLAKE3 越來越常見,因為它在現代 CPU 上比 SHA-256 快約三到四倍(持續吞吐量達 GB/s 等級),同時保持支援驗證串流讀取的 Merkle 樹設計,不過本工具中的演算法選擇器仍涵蓋大多數發佈者公布的 SHA 系列。
分別雜湊分割壓縮檔的每個部分大型下載常被切成 .001、.002 或 .zipx 等分卷,並附帶每段雜湊(多為 SHA-1 或 SHA-256)。合併前請先把每個分卷與廠商公布的清單逐一比對——只要有一段對不上,重新拼回的檔案就會損壞。本頁可對所有分卷使用同一演算法,無需上傳。每個分卷會先在瀏覽器內讀入記憶體再計算,因此實際上限取決於目前分頁可用堆積;超過該上限時請改用從磁碟串流讀取的桌面工具(sha256sum、certutil -hashfile、Get-FileHash)。
利用比對欄位進行不區分大小寫的匹配有些發佈者使用大寫 Hex,有些使用小寫。貼上一次預期值後,頁面會根據演算法識別碼和標準化大小寫進行比對,因此乾淨的驗證不需要手動逐字元輸入大小寫——相同的摘要無論是 'A591A6...' 還是 'a591a6...' 都能成功匹配。

技術原理

頁面中所有 SHA 摘要都透過 W3C Web Cryptography API(瀏覽器以 crypto.subtle 暴露)計算。呼叫形式為 await crypto.subtle.digest(algorithm, buffer),其中 algorithm 取 'SHA-1'、'SHA-256'、'SHA-384' 或 'SHA-512'(大小寫敏感),buffer 是 ArrayBuffer 或任意 TypedArray。函數回傳一個 Promise,解析後得到摘要位元組的 ArrayBuffer,頁面再以 new Uint8Array 走訪並將每位元組對應為 byte.toString(16).padStart(2, '0') 得到小寫十六進位。SubtleCrypto 僅在安全環境(HTTPS 或 localhost)下可用;SHA-1 仍保留以相容舊場景,但規範明確指出其抗碰撞性已被攻破。 MD5 不在 Web Crypto 規範內(W3C 因碰撞攻擊刻意省略),因此本頁的 MD5 由完全在瀏覽器內執行的純 JavaScript 實作完成。無論 MD5 或 SHA 系列,本工具都透過 FileReader.readAsArrayBuffer 一次性把檔案讀為 ArrayBuffer,再交給 JavaScript MD5 例程或 crypto.subtle.digest 處理。本工具不提供 .append 增量介面,也不使用 Web Worker 回退,因此記憶體必須能容納整個檔案:常見下載沒問題,但多 GB 負載較適合改用從磁碟串流讀取的桌面工具(sha256sum、certutil -hashfile、Get-FileHash)。 摘要長度與安全態勢:MD5 = 128 位元 / 32 個十六進位字元(RFC 1321,王小雲 2004 起抗碰撞被攻破,2012 年被 Flame 惡意軟體實戰利用);SHA-1 = 160 位元 / 40 個十六進位字元(FIPS 180-4,Google 於 2017 年 SHAttered 中以約 9.2×10^18 次 SHA-1 運算公開碰撞,NIST 計畫於 2030 年後正式停用);SHA-256 = 256 位元 / 64 個十六進位字元(FIPS 180-4,目前無已知碰撞,是建議基線);SHA-384 與 SHA-512 = 384 / 512 位元,為 SHA-512 家族的截斷與完整輸出(FIPS 180-4)。密碼學雜湊的雪崩效應意指輸入翻轉 1 位元平均會改變約一半輸出位元,這也是為什麼改動一個位元組就會得到完全不同的摘要。

  • crypto.subtle.digest(algorithm, buffer) 接受 'SHA-1'、'SHA-256'、'SHA-384'、'SHA-512'(區分大小寫),拒絕 'MD5';需要安全上下文(HTTPS 或 localhost),傳回 Promise<ArrayBuffer>。
  • 十六進位編碼:將結果作為 new Uint8Array(digestBuffer) 遍歷,對每個位元組執行 byte.toString(16).padStart(2, '0');比對摘要時不區分大小寫(透過 .toLowerCase() 正規化)。
  • MD5 不在 Web Crypto 內(規範刻意省略);本工具以純 JavaScript 計算 MD5,透過 FileReader.readAsArrayBuffer 一次性將檔案讀為 ArrayBuffer,單次產出 32 個小寫十六進位字元的摘要。
  • 記憶體特點:頁面會將整個檔案一次性讀入單一 ArrayBuffer(沒有 .append 增量介面,也不解除安裝到 Web Worker),再一次性交給 JavaScript MD5 或 crypto.subtle.digest 處理。檔案超過目前分頁可用堆積時,請改用從磁碟串流讀取的桌面工具(sha256sum、certutil -hashfile、Get-FileHash)。
  • 摘要大小(FIPS 180-4):MD5 128 位元,SHA-1 160 位元,SHA-256 256 位元,SHA-384 384 位元,SHA-512 512 位元;十六進位字元數為位元組數的兩倍。
  • 已知碰撞攻擊:MD5 被王小雲 2004 年破解,2012 年被 Flame 利用;SHA-1 被 Google SHAttered 2017 年破解(約 9.2 × 10^18 次運算,約 110 GPU 年);SHA-256 及以上無已知實際碰撞。
  • 雪崩效應:單一位元輸入變更平均翻轉約 50% 的輸出位元;這就是為什麼一個位元組的編輯會產生完全不同的十六進位摘要,以及為什麼部分檔案比對不可能存在。

範例

以發行方公布的雜湊值驗證下載檔案

檔案:sample.bin(3 位元組,內容:abc)

SHA-256(計算結果):
  ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

發行方公布的 SHA256SUMS 行:
  ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  sample.bin

相符 -> 下載完整,未遭竄改

(兩個值皆為 FIPS 180-2 中針對 3 位元組輸入 'abc' 的
SHA-256 參考向量。實務上請以實際檔案取代輸入;
此演算法的輸出是確定性的。)

對同一輸入比較多種演算法

檔案: sample.txt(3 位元組,內容:abc)

MD5:     900150983cd24fb0d6963f7d28e17f72
SHA-1:   a9993e364706816aba3e25717850c26c9cd0d89d
SHA-256: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SHA-512: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f

演算法不同,輸入相同 -> 安全性檢查請使用 SHA-256 或更強的演算法

(MD5 為 RFC 1321 的參考向量;其餘為 FIPS 180-2 的
參考向量,皆對應 3 位元組輸入 'abc'。)

偵測 1 位元組變動(雪崩效應)

輸入 A:abc(3 位元組)
輸入 B:abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq(56 位元組)

A 的 SHA-256:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
B 的 SHA-256:248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1

輸入的微小變動會產生完全不同的雜湊值
-> 這就是雪崩效應的展現。

(兩個值皆為 FIPS 180-2 的 SHA-256 參考向量。)

瀏覽器主控台中的驗證參考

// 在 Node.js 中重現以便比對
$ printf 'abc' | shasum -a 256
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

// Windows 上的 PowerShell
PS> 'abc' | Get-FileHash -Algorithm SHA256 | Select-Object -ExpandProperty Hash
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

// 在瀏覽器主控台中使用 Web Crypto API:
// const buf = new TextEncoder().encode('abc');
// const hash = await crypto.subtle.digest('SHA-256', buf);
// -> 為 'abc' 之 SHA-256 結果的 ArrayBuffer(FIPS 180-2 參考向量)

檔案僅留在您的瀏覽器中,不會上傳。

常見問題

可以產生哪些雜湊演算法?

常見選項有 MD5、SHA-1、SHA-224、SHA-256、SHA-384 與 SHA-512。SHA 系列由瀏覽器的 Web Crypto API 計算,MD5 則使用內建 JS 實作。SHA-256 是目前推薦的通用選擇。

檔案會被上傳到任何地方嗎?

不會。雜湊計算完全在你的瀏覽器中透過 File API 與 Web Crypto 進行。位元組會分塊讀入記憶體並在本機計算雜湊——檔案不會經過網路。你可以在計算雜湊時打開「網路」分頁自行驗證。

MD5 既然已被破解,為什麼還提供?

MD5 在安全用途上已被攻破(碰撞容易構造),但在驗證下載檔案是否與來源逐位元相同這類非安全的「校驗碼」用途上仍是事實標準——許多廠商至今仍同時公開 MD5 與 SHA-256。MD5 只能用於這類用途,絕對不要拿來做密碼雜湊或數位簽章。

為什麼看起來相同的檔案 SHA-256 卻不一樣?

雜湊是針對全部位元組計算的,因此一個結尾換行、一個 BOM,或不同的換行字元(CRLF 與 LF)都會讓雜湊完全不同。請重新下載原始檔,不要用複製貼上;或用二進位檢視器確認兩份檔案位元組完全相同。

有檔案大小限制嗎?

瀏覽器必須有足夠記憶體來讀取檔案。現代桌機可以處理數 GB 的檔案,但行動瀏覽器在數百 MB 左右就可能耗盡記憶體。對於極大檔案建議使用桌面工具(sha256sum、certutil、Get-FileHash),它們從磁碟串流讀取,速度也更快。

兩個不同的檔案有可能產生相同的雜湊嗎?

理論上會(鴿籠原理),但 SHA-256 的機率低到天文等級。MD5 與 SHA-1 已有已知的碰撞攻擊,因此兩個檔案的 MD5 或 SHA-1 相同並不能證明它們是同一個檔案。SHA-256 在現有攻擊下尚不可行。

為什麼我的雜湊跟網站公布的不一樣?

最常見的原因是:你下載的是本地化、已簽章或重新打包的版本;網站公布的是另一個版本的雜湊;或者你的下載被截斷。請用其他工具重新下載再算一次雜湊。如果仍然不符,就不要信任這份檔案。