哈希生成器
支援 MD5、SHA-1、SHA-256、SHA-384、SHA-512 多種哈希演算法
什麼是哈希?
哈希(Hash)是一種將任意長度的資料映射為固定長度摘要的演算法。相同的輸入始終產生相同的輸出,而微小的輸入變化會導致完全不同的輸出,且無法從哈希值反推原始資料。常見的哈希演算法包括 MD5、SHA-1、SHA-256、SHA-384、SHA-512 等,廣泛用於資料完整性校驗、密碼儲存、數位簽章等場景。 安全相關結果不能孤立判斷,還要結合金鑰、使用情境、演算法選擇和可信來源一起評估。
如何使用
如何使用
- 選擇輸入模式:文字輸入或檔案上傳
- 輸入文字內容或拖放檔案
- 勾選你要產生的雜湊演算法(可複選)
- 點選「Generate Hash」按鈕開始計算
- 點選「Copy」複製單一雜湊值,或「Copy All」複製全部結果
雜湊注意事項
- 雜湊值是確定性的指紋;即使只更動輸入中一個位元組,也會產生完全不同的結果。
- 涉及安全性時,請使用 SHA-256 或更強的演算法進行完整性檢查,並避免在新安全工作流程中使用 MD5/SHA-1。
使用場景
技術原理
密碼學雜湊函式將任意長度的輸入映射為固定長度的摘要,具有三項安全特性:原像抗性(難以反推)、第二原像抗性(難以找到具有相同摘要的不同輸入)和碰撞抗性(難以找到任意兩個具有相同摘要的輸入)。MD5(Rivest 1991,RFC 1321)、SHA-1(NIST FIPS 180-1,1995)和 SHA-2 家族(FIPS 180-4,2012)都是 Merkle-Damgård 結構:輸入被填充到區塊大小的倍數,然後透過單向壓縮函式迭代。區塊大小:MD5、SHA-1、SHA-256 為 512 位元,SHA-512 為 1024 位元。摘要大小分別為 128 / 160 / 256 / 384 / 512 位元。 MD5(Rivest 1991)是 128 位元雜湊,64 輪四分之一輪操作,使用四個 32 位元鏈結字(A、B、C、D),常數源自正弦函式(無安全意義,僅為打破對稱性)。碰撞攻擊:Wang 等人 2004 年將 MD5 碰撞搜尋降至 2⁴⁰ 次雜湊評估(手算差分路徑);Stevens 2009 年編寫了選擇前綴碰撞工具;Flame 惡意軟體 2012 年使用新穎的選擇前綴攻擊偽造了 Microsoft 程式碼簽章證書,標誌著首個已知的實際 MD5 碰撞利用。如今,MD5 碰撞在 CPU 上花費不到一美元,在 GPU 上僅需毫秒級時間。任何新協議請使用 SHA-256。 SHA-1(FIPS 180-1,NIST 於 2011 年在 FIPS 180-4 之後棄用)是 160 位元雜湊,80 輪操作,使用五個 32 位元鏈結字。SHAttered 攻擊(Stevens 等人,2017 年 2 月)產生了首個實用的 SHA-1 碰撞,花費約 6,500 CPU 年和 110 GPU 年。到 2020 年,選擇前綴碰撞以約 45,000 美元的 GPU 時間即可實現,到 2025 年商品硬體上的碰撞成本遠低於 10,000 美元。Git 於 2020 年從 SHA-1 遷移到 SHA-256;HTTPS 證書自 2017 年起不允許使用 SHA-1。選擇前綴碰撞的 SHAttered 輸出('SHAttered.pdf' 和 'SHAttered2.pdf')是標準測試向量:它們的 SHA-1 摘要相同但內容不同。 SHA-2(FIPS 180-4,2012)涵蓋六種雜湊:SHA-1 的後繼者 SHA-224、SHA-256、SHA-384、SHA-512 加上兩個截斷變體 SHA-512/256 和 SHA-512/224。SHA-256 內部使用六個邏輯函式(Ch、Maj、Σ0、Σ1、σ0、σ1)和 64 個輪常數 K[t] = ⌊∛(第 t 個質數小數部分的前 32 位元)⌋——質數立方根結構純粹是美學考量,無安全作用。SHA-256 自 2010 年左右起一直是主力,是 TLS 1.3(RFC 8446)、Bitcoin 工作量證明(直到 2025 年的轉型討論)和大多數定址儲存的事實標準。SHA-512/256 在 64 位元硬體上更快,因為它使用 64 位元字組並執行 SHA-512 的壓縮後截斷。 SHA-3(FIPS 202,2014)和 Keccak(原始提交)使用根本不同的結構:Keccak-f[1600] 海綿結構,具有 1600 位元狀態,交替吸收/擠壓階段。SHA-3 具有與 SHA-2 相同的摘要大小,但能抵抗影響 Merkle-Damgård 雜湊的長度擴展攻擊——在雜湊秘密前綴 MAC 時非常有用。BLAKE2(RFC 7693)在軟體中比 SHA-256 更快,WireGuard、Argon2 和多個現代協議都在使用。 本頁面透過 SubtleCrypto.digest 在瀏覽器中執行 SHA-1、SHA-256、SHA-384 和 SHA-512(呼叫平台原生程式碼——Chromium 上為 OpenSSL/BoringSSL,Firefox 上為 NSS,Safari 上為等效實作),並回退到純 JS 的 MD5 實作,因為 SubtleCrypto 不暴露 MD5(依 W3C Web Crypto API,MD5 處於 'recommend-only' 狀態)。對於 10 MB 的檔案,V8 中的 SHA-256 在現代筆電上執行速度約 400 MB/s,而純 JS 的 MD5 約 100-150 MB/s——Web Crypto SHA 家族比任何純 JS 實作快 3-4 倍,這就是頁面將 SHA-1 以上路由到原生介面的原因。
- MD5(Rivest 1991,RFC 1321):128 位元摘要、512 位元區塊、64 輪、Merkle-Damgård。自 Wang 2004(2⁴⁰ 工作量)起碰撞已被破解,Flame 2012 的選擇前綴也被破解——永遠不要用於新程式碼,但用於非安全用途的校驗碼、ETag、內容指紋或快取鍵仍然可以。
- SHA-1(FIPS 180-1,1995;FIPS 180-4 於 2011 年棄用):160 位元摘要。SHAttered 碰撞(Stevens 等人,2017 年 2 月)花費約 6,500 CPU 年;選擇前綴碰撞現在低於 10,000 美元。Git 於 2020 年遷移到 SHA-256;CA/Browser Forum 於 2017 年禁止在 HTTPS 證書中使用 SHA-1。
- SHA-256(FIPS 180-4):256 位元摘要、64 輪 Ch/Maj/Σ0/Σ1/σ0/σ1、64 個輪常數 K[t] 源自 ∛(質數) 小數部分。TLS 1.3(RFC 8446)、大多數定址儲存和 Bitcoin 挖礦的主力。256 位元安全等級提供約 128 位元碰撞抗性。
- SHA-384/SHA-512(FIPS 180-4):SHA-512 使用 64 位元字組、80 輪、1024 位元區塊。在 64 位元硬體上大約比 SHA-256 快 1.5-2 倍。SHA-384 是 SHA-512 截斷至 384 位元;SHA-512/256 是 SHA-512 截斷至 256 位元,比 SHA-256 提供更好的長度擴展抗性。
- SHA-3(FIPS 202,2014)/ Keccak:使用 Keccak-f[1600] 置換的海綿結構,SHA3-256/384/512 的速率分別為 1088/832/576 位元。能抵抗影響 Merkle-Damgård 雜湊的長度擴展攻擊——適用於秘密前綴 MAC。
- BLAKE2(RFC 7693)和 BLAKE3 是現代快速雜湊;BLAKE2s 是典型的 MAC 金鑰派生,BLAKE2b 被 WireGuard 和許多協議使用,BLAKE3 增加了 Merkle 樹以支援平行雜湊。截至 2025 年未納入 Web Crypto,因此本頁面不暴露它們。
- Web Crypto API(W3C):SubtleCrypto.digest('SHA-256', data) 回傳 Promise<ArrayBuffer>,由平台原生程式碼計算。V8 上 SHA-256 約 400 MB/s,純 JS MD5 約 100-150 MB/s——3-4 倍的差距就是頁面將 SHA-1 以上路由到 SubtleCrypto 的原因。
- 長度擴展注意事項:H(secret || message) 對任何 Merkle-Damgård 雜湊(MD5、SHA-1、SHA-2)都是可偽造的,只要攻擊者知道摘要和訊息長度。HMAC(RFC 2104)和 SHA-3 可避免此問題。MAC 請使用 HMAC-SHA-256 或 KMAC;對不可信輸入的雜湊,原始摘要即可。
範例
FIPS 180-2 測試向量:空字串與 'abc'
輸入: '' (empty, 0 bytes)
MD5: d41d8cd98f00b204e9800998ecf8427e (32 hex chars)
SHA-1: da39a3ee5e6b4b0d3255bfef95601890afd80709 (40 hex chars)
SHA-256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (64 hex chars)
SHA-512: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
輸入: 'abc' (3 bytes, the canonical FIPS test vector)
MD5: 900150983cd24fb0d6963f7d28e17f72
SHA-1: a9993e364706816aba3e25717850c26c9cd0d89d
SHA-256: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SHA-512: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
每種輸出長度由演算法固定(MD5 128 位元、SHA-1 160 位元、
SHA-256 256 位元、SHA-512 512 位元),與輸入長度無關。FIPS 180-2 56 位元組測試向量(多區塊)
輸入: 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' (56 bytes)
SHA-256: 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
SHA-512: 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018
50d1c9ef3504cabb287a00833cf81a7e (128 hex chars - 僅顯示前 64 字元,
完整摘要為 64 位元組 / 1024 位元)
這個 56 位元組向量橫跨兩個 512 位元 SHA-256 區塊,可驗證
訊息排程(單字 16..63 的 sigma_0 / sigma_1 展開)。
它是 NIST CAVP 對 SHA-256 的參考輸入,也是確認訊息排程
迴圈是否正確實作的標準方式。若結果相符,代表區塊填充、
長度附加與最終狀態加總皆正常運作。SHA-512 採相同的
Merkle-Damgard 結構,但使用 64 位元字長與 80 步排程,
因此同樣的 56 位元組輸入會產生 128 位 hex 字元的摘要。雪崩效應與編碼陷阱
輸入: '' (empty) MD5: d41d8cd98f00b204e9800998ecf8427e
輸入: 'a' (one byte) MD5: 0cc175b9c0f1b6a831c399e269772661
新增單一位元組會改變每一位元的輸出 — 這就是雪崩特性。
大小寫亦同(a -> A 將 0x61 變為 0x41,第 0x20 位有一位元差異),
尾端空白也是。請注意,可見文字不論是否帶有結尾的 '\n' 或
UTF-8 BOM (0xEF 0xBB 0xBF),產生的摘要皆不同,因此要比對
已公布的校驗碼,必須完全比對位元組序列,而非可見字元。
瀏覽器與 Node 會先將字串透過 TextEncoder 處理,使輸入位元組
具確定性;若 JS 版 MD5 直接吃字串,對非 ASCII 輸入會產生錯誤雜湊。使用 sha256sum 驗證檔案完整性
$ sha256sum ubuntu-24.04-desktop-amd64.iso
4d0c238817f7d74c93cfbe7939f8f7a4f9a0d0c7c0e8a6c4f9a0d0c7c0e8a6c4 *ubuntu-24.04-desktop-amd64.iso
1. 將相同的 .iso 拖入此頁面的檔案模式並選擇 SHA-256。
2. 將 64 字元的摘要複製到比對欄位。
3. 若摘要相符,代表下載的檔案與發行方位元組完全相同。
不相符則表示檔案損毀、未下載完整,或版本與資訊清單中的不同。
同一檔案的 MD5 與 SHA-1 摘要分別為 32 與 40 字元;
SHA-256 與 SHA-512 為 64 與 128 字元。比對前請確認發行方
所使用的演算法相同。常見問題
這個工具支援哪些演算法?
通常是 MD5、SHA-1、SHA-256、SHA-384、SHA-512,有時還包含 SHA-3 / RIPEMD-160。SHA-256 是目前的標準選擇;MD5 與 SHA-1 只應用於非安全用途的校驗。
雜湊跟加密一樣嗎?
不一樣。雜湊是單向的——拿到雜湊值無法以演算法回推原始輸入(除非對小範圍輸入暴力破解)。加密則可用金鑰可逆。指紋與完整性檢查使用雜湊,機密性則使用加密。
輸入是在哪裡進行雜湊的?
所有雜湊計算都在你的瀏覽器中透過 Web Crypto API 或純 JS 實作完成,不會送到伺服器。你可以在貼上輸入時打開「網路」分頁確認。
為什麼相同輸入在另一個網站得到不同的雜湊?
差異通常來自輸入的前處理:換行字元(CRLF 與 LF)、結尾空白、字元編碼(UTF-8 與 UTF-16),或某些工具自動補上的換行。雜湊演算法本身在所有實作中都是確定性的。
可以反推雜湊嗎?
從數學上不行。實務上,來源範圍小的短輸入(常見密碼、字典詞、短數字)可以在預先計算的彩虹表中查到。對任何敏感資料來說,這正是要使用加鹽和如 bcrypt、Argon2 等慢雜湊的原因——本工具無法取代它們。
可以用這個工具雜湊密碼嗎?
不行。單純使用 SHA-256 對密碼儲存來說太快了。請改用 bcrypt、scrypt 或 Argon2,搭配每位使用者獨立的鹽和經過調校的工作量參數。SHA 系列雜湊適合用在檔案完整性、內容定址、簽章輸入等場合,不是密碼。
為什麼不同雜湊長度不一樣?
每種演算法有固定的摘要長度:MD5 為 128 位元(32 個十六進位字元)、SHA-1 為 160 位元(40 個字元)、SHA-256 為 256 位元(64 個字元)、SHA-512 為 512 位元(128 個字元)。越長越能抵抗碰撞,但雜湊本身佔用的儲存空間也較大。