雜湊生成器

計算任意文本或檔案的 MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3、Keccak-256、RIPEMD-160、BLAKE2b 或 BLAKE2s 摘要 —— 是校驗和、完整性檢查與快取鍵的稱手工具。貼上期望的摘要即可對照你的輸入進行校驗,也可以貼上一段未知雜湊串,識別它可能出自哪種演算法。SHA-1/256/384/512 來自瀏覽器原生 WebCrypto,其餘是自包含的純 JavaScript 實現,因此全部在本地執行。另請參閱隨機數生成器獲取帶種子的隨機序列。
完全本地執行 —— 不上傳任何內容。輸入最大 200 MB。
輸入: 演算法:
輸出格式: SHA-1 已過時 —— 除非確有需要,否則建議優先使用 SHA-256/512。
摘要行採用 “演算法名 雜湊值” 的形式,方便複製進發布說明或下載清單。
貼上下載頁或清單給出的摘要。本工具能容忍大小寫、空格、冒號、sha256= 風格字首、MD5 (file.exe) = 風格包裝以及多行 md5sum 輸出,然後與你上方勾選的演算法逐一比較。
貼上一段未知雜湊串。工具會讀取其長度、字元集與字首,列出可能產生它的演算法 —— 從普通 hex 摘要到 $2b$…、$argon2id$… 之類的 PHC 風格密碼雜湊。
如何選擇演算法:
如今做完整性校驗,SHA-256 是合理的預設值。SHA-512 更強,在 64 位硬體上執行也更快,代價是輸出更長;需要截短長度的 SHA-2 摘要時,SHA-384 是折中選項。SHA-3 是獨立設計的 NIST 標準(並非 SHA-2 升級版),當你想要一種與 SHA-2 無共同淵源的演算法時,它是標準答案;Keccak-256 是以太坊等系統使用的標準化前變體,與 SHA3-256 只差一個填充位元組。BLAKE2b/BLAKE2s 是為軟體實現而設計的快速現代雜湊;RIPEMD-160 是較老的設計,仍用於比特幣與 OpenPGP 場景。對惡意輸入而言,SHA-1 和 MD5 在密碼學上已被攻破,但用於去重、遺留系統與非對抗性校驗和仍然正確且廣泛使用 —— 凡是攻擊者可能控制內容的場合絕不要用它們。今天沒有任何雜湊是“抗量子”的 —— 量子計算機首先威脅的是簽名與金鑰交換 —— Grover 演算法只會把有效雜湊長度減半,所以 SHA-256 早已穩穩高於實用界限。雜湊是確定性的:同樣的位元組永遠產生同樣的摘要,這正是它能驗證下載或配置檔案是否完好的原因。
在找中國國密雜湊?
SM3(GB/T 32905-2016)是中國商用密碼要求的摘要演算法,不在本頁 —— 它在SM3 雜湊生成器頁面有自己的工具(支援 HMAC-SM3),旁邊還有 SM 系列的其餘成員:SM4(分組密碼)、SM2(簽名與加密)和SM9(標識密碼)。
雜湊生成器 —— 從零講清每一種演算法
一句話:密碼學雜湊函式是一臺單向攪拌機 —— 它接收任意數量的位元組,把它們壓縮成一個固定長度的指紋:同樣的輸入永遠得到同樣的指紋,但指紋不會告訴你如何還原輸入。本頁在你的瀏覽器標籤頁裡完整執行其中十一種。

下面的每種演算法都按同樣的四步講:它是什麼(白話版)、不加公式的工作直覺、今天是否還該用它、以及人們最常見的誤用。

MD5

它是什麼。MD5(1992 年)把任意輸入壓縮成一個 128 位(32 個 hex 字元)的指紋。它為 1990 年代計算機的速度而設計,而且確實很快 —— 這正是它至今無處不在的原因:軟體下載頁、檔案去重快取、遺留資料庫鍵。

工作直覺。輸入被切成 64 位元組的塊。每一塊被四次(四輪略有不同的混合輪次)攪進一個 128 位的滾動狀態,最後一塊處理完後,把狀態打印出來就是摘要。這種攪拌由加法、迴圈移位和查表構成 —— 當年便宜,現在也便宜。

還該用它嗎?對於沒人想作弊的校驗和場景 —— 檢測損壞的下載、查詢重複檔案 —— 它仍然能完美報告損壞。但對任何對抗性場景,不行:自 2004 年起,研究人員可以在幾秒內構造出兩個 MD5 相同的不同檔案,2008 年還發生過利用 MD5 碰撞的真實證書偽造事件。把它當序列號用,別當鎖用。

常見誤區。用 MD5 存密碼(它太快了 —— 適合密碼的演算法見密碼雜湊生成器);因為“MD5 對上了”就信任檔案,而攻擊者同樣公佈了這個 MD5;以及把 MD5 (file) = hash 整行而不是僅雜湊部分貼上進去 —— 上面的校驗框兩種都接受。

SHA-1

它是什麼。SHA-1(1995 年,NSA)產生 160 位(40 個 hex 字元)的摘要。二十年間它一直是 Git、TLS 證書和 PGP 簽名的預設完整性雜湊。

工作直覺。與 MD5 同一家族配方,但狀態是 160 位,每個 64 位元組塊要做 80 輪混合,操作種類也更多。多出來的輪次本意是讓這臺攪拌機更難被逆向。

還該用它嗎?對抗性場景一律不用。2017 年 Google 造出兩個 SHA-1 相同的不同 PDF(SHAttered 攻擊,約 6500 CPU 年),理論破解成為現實。Git 至今仍以 SHA-1 儲存物件,但只把它當識別符號,並已加入碰撞檢測。新專案請用 SHA-256 或 SHA-3。

常見誤區。以為 160 位“還是夠長” —— 破壞來自內部結構,與暴力窮舉無關;以及把 RIPEMD-160 和 SHA-1 混為一談,因為兩者都是 40 個 hex 字元(上方識別框能區分它們)。

SHA-2:SHA-256、SHA-384 與 SHA-512

它是什麼。SHA-2 家族(2001 年,NSA)是現代完整性校驗的主力。SHA-256 給出 256 位(64 個 hex 字元),SHA-512 給出 512 位,SHA-384 是把 SHA-512 的結果截短到 384 位 —— 協議要求更短標籤時很有用。

工作直覺。64 字節(512 位變體為 128 字節)的塊經過 64(或 80)輪加-移-混步驟摺疊進一個 8 字狀態。與 MD5 不同,消息調度會先把每塊拉伸進一個擴展緩衝區,正是這一點擊垮了攻破 MD5 和 SHA-1 的那類攻擊。一個有趣的事實:在 64 位 CPU 上 SHA-512 比 SHA-256 更快,因為它每輪用 64 位算術處理兩倍的數據。

還該用它嗎?用 —— 如今檔案校驗和、程式碼簽名與證書指紋的預設答案就是 SHA-256,經過二十年分析沒有已知實用破解。想要更大余量或平臺跑得更快時,用 SHA-384/512。

常見誤區。單用 SHA-256 存密碼——它是快哈希,而快正是密碼場景的大敵(請用 bcrypt/scrypt/Argon2id);以及在對抗性碰撞場景裡把摘要長度當成強度——長度只是上限。

SHA-3(SHA3-256 / SHA3-512)與 Keccak-256

它是什麼。SHA-3(2015 年,由 Bertoni、Daemen、Peeters 和 Van Assche 的 Keccak 提案標準化)是 NIST 的第三個雜湊標準。它與 SHA-2 內部毫無共享 —— 入選的理由恰恰是作為 SHA-2 萬一失守時的獨立備份。

工作直覺。Keccak 不是把塊攪過一個小狀態,而是反覆“吸收再擠出”:輸入逐位吸收進一個 5×5×64 位的海綿,整個海綿用固定置換攪亂(對整個狀態做 24 輪位運算),然後擠出摘要位。海綿影像就是全部思想:容量位永遠不會被輸出,而它們正是這個函式單向性的來源。

Keccak-256 與 SHA3-256。兩者只差一個填充位元組。Keccak 團隊的原始提案用 0x01 填充最後一個塊;NIST 把標準填充改成了 0x06(為了與 SHA-2 時代的 Keccak 用法做域分離)。以太坊採用了原始填充,所以它的“keccak256”對每個輸入都與標準 SHA3-256 不同。本頁兩者都提供,分開勾選。

還該用它嗎?用 —— 策略要求非 SHA-2 演算法時它是首選,生態已經在用的地方照用。常見誤區:以為 SHA3-256 和 Keccak-256 可以互換(不可以 —— 對同一輸入比較本頁輸出的兩行就知道);以及以為“SHA-3”取代了 SHA-2 —— 兩者都安全,SHA-2 仍是部署更廣的那個。

RIPEMD-160

它是什麼。RIPEMD-160(1996 年,歐洲學界 RIPE 聯盟,由 Dobbertin、Bosselaers 和 Preneel 強化)輸出 160 位。它是完全的歐洲設計,刻意獨立於 NSA 設計的 SHA 家族。

工作直覺。每個 64 字節塊由兩條並行的 80 輪流水線以不同的常量和移位量處理;最後把兩條線和舊狀態合併。雙軌結構是設計者用來抵抗當年正在攻破其他 1990 年代哈希的差分攻擊的手段。

還該用它嗎?實踐中它主要活在其他系統內部:比特幣地址用 RIPEMD-160(SHA-256(pk)) 雜湊公鑰,較老的 OpenPGP 金鑰把它作為雜湊選項,它也是 BitTorrent v1 piece 與 SHA-1 並列的傳統雜湊。它沒有實用碰撞攻擊,但 160 位的體量讓它在本書頁裡安全餘量最小。新的獨立用途請優先 SHA-256 或 SHA-3。

常見誤區。以為兩條並行線讓它“強兩倍” —— 限制碰撞抗性的是輸出體量;以及把它和 SHA-1 混淆(同樣 40 個 hex 字元;上方識別框會把兩者並列列出)。

BLAKE2b-512 與 BLAKE2s-256

它是什麼。BLAKE2(2013 年,Aumasson、Neves、Wilcox-O'Hearn 和 Winnerlein)是為軟體速度設計的雜湊:BLAKE2b 面向 64 位平臺、最多 512 位輸出,BLAKE2s 面向 32 位平臺、最多 256 位輸出。

工作直覺。它源自 SHA-3 決賽選手 BLAKE,核心是從流密碼 ChaCha 借來的置換:一個 4×4 的字矩陣被列方向與對角線方向交替的混合步驟打亂 —— 像先把網格從上到下洗一遍、再沿對角線洗一遍 —— 每塊 12(BLAKE2b)或 10(BLAKE2s)輪。這些步驟與 CPU 指令完美對應,所以 BLAKE2 常常比 MD5 還快,同時提供與 SHA-3 相當的安全性。

還該用它嗎?用 —— 它是完全現代、未被攻破的設計,在效能敏感的軟體中很受歡迎(某些生態的包完整性、內容定址儲存、備份去重),也用作快速 MAC。本頁上 BLAKE2b-512 給出最長的摘要,BLAKE2s-256 是緊湊的現代選項。

常見誤區。以為“更快一定更弱” —— BLAKE2 的快是設計出來的,不是偷工減料;以及不知道 BLAKE2 還接受金鑰(變成 MAC)或個性化字串 —— 本頁始終使用無金鑰的普通模式。

讀懂校驗框與識別框

校驗。校驗框會先把你貼上的內容規範化 —— 大小寫、每兩位一個冒號、sha256= 字首、BSD 風格的 SHA256 (file) = hash 包裝、雜湊在後的 GNU md5sum 行、游離的 \r\n —— 然後對你當前的輸入(文本或所選檔案)重新計算每種勾選的演算法,報告匹配的演算法。綠色匹配意味著“這些位元組正是釋出方雜湊的那些”;紅色意味著勾選的演算法都沒能產生它 —— 試試勾選更多演算法,或檢查貼上是否被截斷。

識別。識別框不做任何雜湊;它讀取字串的形狀。長度先縮小候選:32 個 hex 字元可能是 MD5,40 可能是 SHA-1 或 RIPEMD-160,64 可能是 SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256,96 是 SHA-384,128 是 SHA-512 / SHA3-512 / BLAKE2b-512。字首會暴露密碼雜湊($2a$/$2b$/$2y$ bcrypt、$argon2id$、$scrypt$、$6$ sha512crypt、$1$ MD5-crypt)—— 那是另一個物種(見密碼雜湊生成器),本頁刻意不計算它們。含有 +、/ 和 = 且長度是 4 的倍數的字串更像 Base64 編碼的資料而不是 hex 摘要;工具會解碼並報告對應的位元組長度。

識別能告訴你什麼、不能告訴你什麼。長度和字元集是格式的指紋,不是演算法的證明:兩個 64 hex 字元的字串可能來自 SHA-256,也可能來自截短的 SHA-512。識別框給可能性排序;校驗框才是真正證明你的位元組匹配哪種演算法的那一個。

十一種演算法一覽
演算法 摘要長度 問世 “The quick brown fox jumps over the lazy dog” 的摘要
MD5128 位19929e107d9d372bb6826bd81d3542a419d6
SHA-1160 位19952fd4e1c67a2d28fced849ee1bb76e7391b93eb12
SHA-256256 位2001d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
SHA-384384 位2001ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1
SHA-512512 位200107e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
SHA3-256256 位201569070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04
SHA3-512512 位201501dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450
Keccak-256256 位2015 年前4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
RIPEMD-160160 位199637f332f68db77bd9d7edd4969571ad671cf9dd3b
BLAKE2b-512512 位2013a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918
BLAKE2s-256256 位2013606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812

上表中的每個摘要都由本頁的引擎親自算出 —— 勾選全部演算法、點選樣例、逐項對比即可驗證。SHA-3、Keccak、RIPEMD-160 與 BLAKE2 各行來自本站加密工具共用的自託管 crypto-shared.js 核心。

常見問題

驗證下載該信哪個框?校驗框,勾選 SHA-256 —— 如今大多數釋出方都簽發 SHA-256 或 SHA-512。識別框只給出候選名單,它永遠無法證明任何關於你檔案的事。

為什麼列表裡會有 Keccak-256?因為以太坊、Swarm 等少數賬本系統標準化的是標準化前的填充。驗證以太坊 keccak256 時必須用那一行,而不是 SHA3-256。

兩個不同輸入能有相同摘要嗎?理論上可以 —— 無限多的輸入對映進有限的摘要集合(鴿籠原理)。實踐層面,在宇宙熱寂之前找到這樣一對輸入,正是“抗碰撞性”要衡量的事,上述演算法中除 MD5 和 SHA-1 外至今都站得住。

雜湊是加密嗎?不是。加密可以用金鑰還原;雜湊是單向攪拌機。本頁沒有任何東西能把摘要“解密”回你的文本 —— 這是特性,不是缺陷。