Developer Tools

雜湊值生成與校驗

文字和檔案的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 一次算齊。下載完的檔案對一下校驗值,確認沒被竄改。全程本機計算,資料不出瀏覽器。

五種演算法一次算齊 文字 + 檔案校驗 本機計算,零上傳 即時出結果
字元數 UTF-8 位元組

FEATURES

一個頁面算齊五種雜湊

從快速指紋到安全簽名,開發、運維、校驗下載時要用到的雜湊值都在這裡。

01

五種演算法

MD5、SHA-1、SHA-256、SHA-384、SHA-512 同屏展示,標註輸出位元數,不用再來回切換工具。

02

即時計算

文本邊輸邊算,無需點按鈕;結果等寬字體展示,點擊整行即可複製。

03

檔案完整性校驗

拖入安裝包、鏡像或壓縮包,直接讀出官方校驗值,確認下載沒有損壞或被竄改。

04

本機計算,零上傳

SHA 家族走瀏覽器內建 Web Crypto API,文本和檔案都不離開本機,敏感內容也能放心計算。

05

UTF-8 一致

文本統一按 UTF-8 位元組計算,結果與 md5sum、PHP md5()、Python hashlib 完全一致。

06

一鍵複製

每種雜湊單獨複製,或一鍵按標準校驗和格式複製全部,直接貼到終端比對。

關於雜湊值,你需要知道的

原理不複雜,但用錯場景會出安全問題。

MD5 和 SHA-1 到底是什麼?

MD5(Message-Digest Algorithm 5,訊息摘要演算法第五版)是 MIT 教授 Ronald Rivest 1991 年設計、1992 年以 RFC 1321 發布的雜湊演算法,輸出固定 128 位元(32 個十六進位字元)摘要,是 MD4 的繼任者。SHA-1 由美國國家安全局(NSA)設計、1995 年作為聯邦標準 FIPS 180-1 發布,輸出 160 位元。兩者曾是二十年間使用最廣的雜湊演算法——檔案校驗、密碼儲存、數位簽名、Git 提交 ID 都基於它們。注意:今天它們仍能算出正確的摘要,「不安全」指的是抗碰撞能力被攻破,而不是計算結果會出錯。

雜湊、加密、編碼是一回事嗎?

不是,三者解決完全不同的問題。編碼(如 Base64、URL Encode)是可逆的格式轉換,任何人都能還原,不提供任何安全性;加密是可逆的,用金鑰把明文變成密文,持有正確金鑰的人可以解密;雜湊是單向的,沒有金鑰,也無法從摘要還原原文,用於指紋、完整性校驗和數位簽名。兩個常見誤區:把 Base64 當作「加密」,以及把「給密碼算 MD5」說成「加密密碼」——那只是雜湊,而且是不安全的用法。

雜湊值為什麼不能反推出原文?

雜湊是單向函式:任意長度的輸入被壓縮成固定長度的摘要,過程中大量資訊被「折疊」丟棄。就像無法從一句話的字數還原這句話本身一樣,理論上無法從雜湊值反推原文。安全演算法的設計目標就是讓這種逆向在計算上不可行。

MD5 和 SHA-1 還能用嗎?

用於「校驗檔案有沒有在傳輸中損壞」依然夠用——意外的位元組改動幾乎必然改變 MD5。但絕不能用於安全場景:MD5 和 SHA-1 的碰撞攻擊早已實用化(研究者能用可控內容構造相同 MD5 的兩個檔案),密碼儲存、數位簽名、憑證都應使用 SHA-256 及以上。

同一段文字,為什麼這裡和別的工具結果不一樣?

最常見的原因有三個:① 字元編碼不同(本工具統一按 UTF-8,部分老工具按 GBK 或 Latin-1);② 尾部多了換行符,命令行 echo 預設會在末尾加 \n(用 echo -n 可避免);③ 複製時混入了空格或不可見字元。雜湊對每個位元組都敏感,差一個位元組結果就完全不同。

密碼為什麼不能直接存 MD5/SHA-256?

普通雜湊算得太快,攻擊者拿到外洩的雜湊庫後可以每秒窮舉幾十億次,彩虹表也能直接反查常見密碼。密碼必須用專門的慢雜湊演算法(bcrypt、scrypt、Argon2)並加鹽,讓每次驗證都故意慢且耗記憶體,暴力破解成本高到不現實。

怎麼驗證下載檔案的完整性?

在官網找到檔案公布的校驗值(通常是 SHA-256),把下載好的檔案拖進本工具的「檔案校驗」標籤,再把官方校驗值貼到結果區上方的輸入框——工具會按長度自動辨識演算法,匹配的那一行變綠即說明檔案位元組與官方發布的完全一致;變紅則可能下載損毀或被中間人替換,不要執行。

五種演算法怎麼選

按場景選,越新的演算法輸出越長、抗攻擊越強,計算也稍慢。

演算法 誕生 輸出長度 安全性 典型用途
MD5 1992 128 位(32 字元) 已被攻破,可碰撞 非安全場景的檔案指紋、去重、相容老系統
SHA-1 1995 160 位(40 字元) 2017 年碰撞實用化 Git 歷史標識等遺留系統,不應用於新安全場景
SHA-256 2001 256 位(64 字元) 目前安全 檔案校驗、數位簽章、TLS 憑證、區塊鏈,最通用
SHA-384 2001 384 位(96 字元) 安全 SHA-512 的截斷版,合規要求 384 位時使用
SHA-512 2001 512 位(128 字元) 安全 高安全等級簽章,64 位 CPU 上常比 SHA-256 更快

「安全」指截至目前沒有公開的實用碰撞攻擊;密碼儲存無論選哪個都應改用 bcrypt/Argon2。

checksum(校驗和):下載的檔案到底怎麼驗

下載頁上那串 MD5、SHA-256 值到底有什麼用、怎麼對、用什麼對——這一節一次講清。

为什么要校驗

下載到手的檔案和伺服器上的原始檔案未必是同一個。花十秒鐘對一下校驗值,能擋掉三類麻煩:

傳輸損壞

大檔案經過續傳、不穩定網路,個別位元組出錯並不少見;裝上殘缺的安裝包,排查起來遠不止十秒。

鏡像不同步

很多軟體實際從鏡像站或 CDN 下載,同步延遲、快取異常時,拿到的可能是舊版甚至半個檔案。

人為掉包

下載源被入侵、公共網路被劫持時,檔案可能被植入後門。2016 年 Linux Mint 官網被駭,下載連結被替換成帶後門的鏡像,官方事後第一件事就是呼籲所有使用者核對 checksum。

什麼是 checksum

發布方在伺服器上對檔案算一次雜湊,把結果公布在下載頁;你下載完在本地再算一次,兩串值逐字元相同,就代表檔案位元組與官方發布的完全一致——既沒損壞,也沒被替換。校驗對每個位元組都敏感:哪怕只改動一個位元組,算出來的值也會面目全非。廣義的 checksum 還包括 CRC32 這類更簡單的演算法,只能發現意外損壞;而 MD5/SHA 這類密碼學雜湊還能抵禦人為偽造,安全性更高。

三步校驗一個檔案

  1. 1
    拿到官方校驗值

    在檔案下載頁找到官網公布的 MD5 / SHA-256 值(常寫作 checksum、校驗和或 .sha256 附件檔案),複製整串。

  2. 2
    拖入檔案並貼上

    切到本頁「檔案校驗」標籤,把下載好的檔案拖進來,再把校驗值貼到結果區上方的輸入框。

  3. 3
    看顏色下結論

    工具按長度自動識別演算法:變綠即檔案與官方完全一致,可放心使用;變紅則可能下載損壞或被篡改,不要執行。

看懂官網的校驗值

各家下載頁的寫法五花八門,但都離不開「雜湊值 + 檔名」兩個要素。下面三種是最常見的形態,貼上時只取雜湊值部分即可(本工具會自動忽略空白和換行):

# 1. 單行:只有一個值
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a

# 2. sha256sum 格式:值 + 兩個空白 + 檔名(SHA256SUMS 清單就是多行這種)
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a  ubuntu-24.04.iso

# 3. BSD 格式:演算法 (檔名) = 值
SHA256 (ubuntu-24.04.iso) = a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a

MD5 還是 SHA-256

官網給什麼就驗什麼,但如果可以自己選:防「傳輸中意外損壞」MD5 完全夠用(意外改動幾乎必然改變 MD5);要防「有人故意調包檔案」(安全軟體、憑證、簽名包),必須用 SHA-256 或更強——MD5 的碰撞攻擊早已實用化,攻擊者可以建構出 MD5 相同、內容不同的兩個檔案。這段歷史見下方「安全小史」。

不用瀏覽器時的校驗命令

Linux 和 macOS 的校驗工具支援 -c 參數直接核對清單檔案,無需人工比對;Windows 內建命令只能算出值,再與官網字串比對。

環境 校驗命令
Linux sha256sum -c SHA256SUMS (自動核對清單裡的每個檔案)
macOS shasum -a 256 -c checksum.txt
單個值快速核對 echo "官網值 檔名" | sha256sum -c - (輸出 OK 即通過)
Windows 先 Get-FileHash 檔名 -Algorithm SHA256 算出,再與官網值比對

安全小史:MD5 是如何被攻破的

MD5 不是一夜之間失效的——從學界發現裂縫,到真實世界偽造憑證,用了二十年。

  1. 1992

    MD5 發布

    Ronald Rivest 在 RFC 1321 中公布 MD5。它算得快、實作簡單、任意輸入都輸出 128 位摘要,迅速成為檔案校驗和密碼儲存的事實標準。此時它被認為在密碼學上是安全的。

  2. 2004

    王小云團隊公開 MD5 完整碰撞

    在 CRYPTO 2004 會議上,中國數學家王小云團隊展示了對 MD5 的完整碰撞攻擊——能建構出雜湊值相同、內容不同的兩個檔案(最初約需 IBM P690 超級電腦一小時,改進後在普通電腦上只需幾秒)。MD5 的「抗碰撞性」從理論承諾變成了空談,全場起立鼓掌成為密碼學史上的名場面。

  3. 2008

    偽造證書:碰撞第一次威脅真實網路

    Marc Stevens、Alexander Sotirov 等人用「選擇前綴碰撞」偽造出一張受瀏覽器信任的中級 CA 證書:不同前綴的證書簽名卻相同。這意味著攻擊者可以給任意假冒網站簽發「合法」HTTPS 證書。事件之後證書機構全面停止簽發 MD5 證書。

  4. 2012

    Flame 病毒借 MD5 攻擊 Windows

    國家級惡意軟體 Flame(火焰)利用 MD5 碰撞,讓微軟的終端服務授權伺服器為一張偽造的程式碼簽名證書背書,借此偽裝成微軟簽名的更新在中東多國傳播。這是 MD5 碰撞第一次被用於真實的網路攻擊,微軟事後緊急修補吊銷了相關證書。

  5. 2017

    SHAttered:SHA-1 正式告破

    Google 與荷蘭 CWI 研究所(Marc Stevens 等)發布兩個內容不同、SHA-1 卻完全相同的 PDF,攻擊消耗約 6500 個 CPU 年和 110 個 GPU 年。各大瀏覽器隨後徹底移除 SHA-1 證書信任,Git 平台也加速棄用 SHA-1,160 位時代落幕。

需要強調:碰撞攻擊不能「破解任意一個已有檔案」的雜湊,而是建構兩個特定檔案使其雜湊相同——但在簽名、證書這類場景下,這已經足以構成致命偽造。

命令行裡怎麼算雜湊

不方便用瀏覽器時,各系統內建命令即可計算(以 SHA-256 為例)。

環境 命令
Linux / macOS sha256sum 檔名 (macOS 也可用 shasum -a 256 檔名)
Windows PowerShell Get-FileHash 檔名 -Algorithm SHA256
Windows CMD certutil -hashfile 檔名 SHA256

用程式碼計算雜湊

寫指令碼或調用介面時,四種常用語言的最小示例。

JavaScript
async function sha256Hex(data) {
  const bytes = typeof data === "string"
    ? new TextEncoder().encode(data)
    : new Uint8Array(data);
  const digest = await crypto.subtle.digest("SHA-256", bytes);
  return [...new Uint8Array(digest)]
    .map((b) => b.toString(16).padStart(2, "0"))
    .join("");
}

// Text
console.log(await sha256Hex("hello"));

// Files: digest accepts an ArrayBuffer directly
const buf = await file.arrayBuffer();
console.log(await sha256Hex(buf));

瀏覽器原生 Web Crypto 只支援 SHA 家族,且頁面需為 HTTPS 或 localhost;MD5 需第三方函式庫。

PHP
echo hash('sha256', 'hello');        // 64 hex characters
echo md5('hello');                   // same as hash('md5', 'hello')

// Streamed: hashes the file without loading it into memory
echo hash_file('sha256', 'setup.exe');

hash() 與 hash_file() 支援 md5、sha1、sha256、sha512 等演算法;算檔案用串流讀取,不占記憶體。

Python
import hashlib

print(hashlib.sha256(b"hello").hexdigest())
print(hashlib.md5(b"hello").hexdigest())

# Large files: streamed, low memory (Python 3.11+)
with open("setup.exe", "rb") as f:
    print(hashlib.file_digest(f, "sha256").hexdigest())

標準庫 hashlib 無需安裝;大檔案用 file_digest() 流式計算(Python 3.11+)。

Rust
use sha2::{Digest, Sha256};
use md5::Md5;

// Text
println!("{:x}", Sha256::digest(b"hello"));
println!("{:x}", Md5::digest(b"hello"));

// Large files: streamed, low memory
let mut file = std::fs::File::open("setup.exe")?;
let mut hasher = Sha256::new();
std::io::copy(&mut file, &mut hasher)?;
println!("{:x}", hasher.finalize());

雜湊不在標準庫,需在 Cargo.toml 引入 RustCrypto 的 sha2、md-5;開啟 std 特性後可用 io::copy 流式算檔案。

常見問題

輸入的文字和檔案會被上傳嗎?

不會。所有計算都在你的瀏覽器內完成:SHA 家族呼叫瀏覽器內建的 Web Crypto API,MD5 在頁面 JavaScript 中計算。斷網後工具依然可用,可以用敏感檔案自行驗證。

為什麼空白文字也有雜湊值?

雜湊演算法對「零位元組輸入」也有唯一且固定的輸出。例如空白字串的 MD5 是 d41d8cd98f00b204e9800998ecf8427e,SHA-256 是 e3b0c442...b855。不過本工具在輸入為空白時不顯示結果,避免複製錯誤。

多大的檔案都能算嗎?

取決於瀏覽器可用記憶體,幾百 MB 的安裝包和鏡像通常沒問題。檔案需要被一次性讀入記憶體,特別大的檔案(數 GB)建議用命令行工具(sha256sum、certutil)計算。

雜湊值為什麼有長有短?

輸出長度由演算法決定:MD5 是 32 個十六進位字元,SHA-1 是 40 個,SHA-256 是 64 個,SHA-512 是 128 個。每兩個字元代表一個位元組,長度與輸入檔案大小無關——一個位元組和幾個 GB 的檔案,SHA-256 都是 64 位元字元。

可以用來生成 API 簽名嗎?

可以。很多開放平台用 MD5 或 SHA-256 對「參數+金鑰」拼接串簽名作請求驗簽。本工具適合除錯時快速核對簽名值;生產程式碼裡應在伺服器端使用語言自帶的雜湊函式庫,不要在前端暴露金鑰。

怎麼用這個工具比對 checksum?

切到「文件校驗」標籤並拖入文件,把官網公佈的校驗值粘貼到結果區上方的輸入框即可。工具會按長度自動識別算法(32 位 MD5、40 位 SHA-1、64 位 SHA-256、96 位 SHA-384、128 位 SHA-512),一致時對應行變綠並提示「校驗通過」,不一致則變紅。校驗值的大小寫、首尾空格和換行會自動忽略,不用手動整理。

相關工具

編碼、加密與密碼相關的其它工具。