RevealTheme logo

雜湊產生器(MD5 / SHA)

產生加密雜湊:MD5、SHA-1、SHA-256、SHA-384和SHA-512。透過Web Crypto API在你的瀏覽器中執行。

什麼是加密雜湊,何時需要它們?

加密雜湊函式是一種確定性演算法,可將任意輸入(幾個位元組、一個數GB的檔案,或整部英文維基百科)轉換為固定大小的輸出,稱為「摘要」(digest)或「雜湊」。SHA-256產生256位元(64個十六進位字元);SHA-512產生512位元;MD5產生128位元。有四個屬性定義了「加密」雜湊,使其區別於非加密雜湊(如CRC32):確定性(相同輸入 → 始終得到相同雜湊)、雪崩效應(僅改變一個位元就會改變約一半的輸出位元)、抗原像性(你無法反向求解雜湊以還原輸入),以及抗碰撞性(你無法找到兩個產生相同雜湊的輸入)。當一個雜湊函式被攻破時,通常是後兩個屬性失守:針對MD5(2004年)和SHA-1(2017年)的碰撞攻擊使它們不再適用於安全目的,儘管它們對於非對抗性的完整性校驗(如檔案校驗碼)仍然適用。對於任何新的安全工作,請使用SHA-256或SHA-512。本工具使用瀏覽器的Web Crypto API(crypto.subtle.digest),在現代裝置上由硬體加速,其輸出與OpenSSL、Python的hashlib模組以及Node的crypto模組逐位元組完全一致。

常見使用場景

  • 驗證下載的檔案是否與發布方公布的SHA-256相符(Linux的ISO映像、安全工具的發行版)。

  • 為快取鍵產生內容定址識別碼(內容雜湊 → 穩定的URL)。

  • 為檔案儲存建立去重複鍵(雜湊相同 = 檔案完全相同)。

  • 實作webhook簽章校驗:用共用密鑰對負載做HMAC-SHA256。

  • 產生Git風格的內容雜湊(用SHA-1作為樹/blob的識別碼)。

  • 透過計算關鍵欄位的雜湊並儲存它,來驗證資料庫資料列的完整性。

常見問題

為什麼MD5在安全方面已被淘汰?
密碼學家已經找到了建構兩個產生相同MD5的不同輸入的方法。一旦碰撞變得可尋找,MD5在對抗性場景中就不再是可靠的完整性訊號(有人可能替換掉一個檔案,並產生另一個具有相同雜湊的檔案)。對於非對抗性的校驗碼(檔案是否正確下載完成?),MD5依然好用;它只是在數位簽章或任何受攻擊者影響的場景中才不安全。
雜湊可以被反向還原嗎?
不能直接還原:加密雜湊是單向函式。但是:(1)對於短的或低熵的輸入(密碼、常見短語),攻擊者可以預先計算每一個可能輸入的雜湊(彩虹表)並查找你的雜湊。這正是密碼雜湊要使用唯一隨機鹽的原因。(2)對於任意長度且高熵的輸入(隨機金鑰、檔案內容),反向還原在計算上是不可行的。
SHA-256和HMAC-SHA256有什麼區別?
SHA-256是簡單雜湊:任何擁有輸入的人都能算出相同的雜湊。HMAC-SHA256是帶金鑰的雜湊:你需要一個共用密鑰才能計算它。webhook使用HMAC,是因為驗證方想知道的是「這是由知道密鑰的人建立的嗎?」,而不僅僅是「負載是否與某個已知值相符?」。帶金鑰的變體請使用我們的HMAC產生器。
我什麼時候該用SHA-512而不是SHA-256?
SHA-512有更多的輸出位元(512對256),這使得碰撞攻擊在理論上更難。但SHA-256在任何合理的時間範圍內都已經足夠安全(抗碰撞的有效強度為2^128)。在64位元硬體上,由於其更寬的內部運算,SHA-512有時會更快。預設請使用SHA-256;若有具體理由,再使用SHA-512。
為什麼我的SHA雜湊與另一個工具算出的不一樣?
三種可能的原因:(1)輸入編碼不同:被雜湊的位元組必須一致。同一段可見文字,用UTF-8、UTF-16或Latin-1會產生不同的雜湊。本工具將輸入編碼為UTF-8。(2)結尾換行字元:有些工具會加入換行字元,有些則不會。(3)BOM(位元組順序標記):某些編輯器會給UTF-8檔案加入一個隱藏的三位元組前綴。
用它處理敏感資料安全嗎?
安全:雜湊計算透過Web Crypto在你的瀏覽器本機進行。輸入永遠不會離開你的裝置。雜湊本身並不「敏感」,因為它們不會洩漏輸入(前提是有足夠的熵),但如果你對低熵資料(如未加鹽的密碼)計算雜湊,請注意任何看到該雜湊的人都有可能透過彩虹表將其反向還原。

相關工具