跳到主要內容
楓葉工具箱 ToolMaple

雜湊計算

計算文字與檔案的 SHA-1、SHA-256、SHA-384、SHA-512 雜湊值,走瀏覽器原生 Web Crypto API。驗檔案下載完整性、比對 checksum、產生密碼學摘要都在本機完成,檔案不上傳。

SHA-1
SHA-256
SHA-384
SHA-512

什麼是 hash?

雜湊(hash)函數把「任意長度的輸入」轉成「固定長度的輸出」,且具有三個關鍵性質:

  • 單向性:從 hash 值無法回推原文(與加密最大差異)
  • 決定性:相同輸入永遠得到相同 hash
  • 雪崩效應:輸入改一個字元,hash 完全不同

這些性質讓 hash 非常適合「驗證資料是否相同 / 沒被篡改」,但「不能還原原文」的場景。 SHA-2(包含 SHA-256、SHA-384、SHA-512)由美國 NSA 設計,NIST 於 2001 年標準化;SHA-3(基於 Keccak 演算法)於 2015 年成為新標準,設計概念與 SHA-2 完全不同,為未來潛在攻擊預備。

Hash vs 加密 vs 編碼

三個常被混為一談的概念:

  • Hash(雜湊):單向、無法還原。例:SHA-256 用於驗證檔案完整性
  • 加密:雙向、有對應的解密過程、需 key。例:AES 加密訊息,收件人用 key 解開
  • 編碼:雙向、純格式轉換、無 key。例:Base64 用於把二進位塞進文字環境

為什麼沒有 MD5?

瀏覽器原生 crypto.subtle API 不支援 MD5,因為 MD5 已被證實能在實際時間內找到碰撞, 不適合任何安全用途。本工具用瀏覽器原生 API 做純前端計算,不引入第三方 lib,所以僅支援 SHA 系列。 若只為了檔案完整性檢查(非安全用途),用 SHA-256 即可。

各演算法用途

  • SHA-1(40 字元):已不安全,避免新系統使用。Git 還在用,舊系統相容性。
  • SHA-256(64 字元):最常見、TLS、區塊鏈、JWT HS256、檔案完整性的事實標準。
  • SHA-384(96 字元):較少用,TLS 1.3 部分套件採用。
  • SHA-512(128 字元):64-bit 系統上比 SHA-256 快,適合大檔案 checksum。

常見問題

能用 SHA-256 儲存使用者密碼嗎?

不能。SHA-256 是「快」hash,攻擊者拿到資料庫後可以每秒測幾億組密碼。 密碼儲存必須用「慢」hash 演算法:bcryptscryptargon2(推薦、2015 年密碼學競賽冠軍) ,配合每個使用者獨立的 salt。

為什麼相同輸入跑出相同 hash?這不是漏洞嗎?

這是設計,不是漏洞。如果不同次跑出不同 hash,就沒辦法做完整性驗證(你下載的檔案跟發布者公佈的 hash 對不起來)。 需要「相同明文每次 hash 不同」時,加 salt 或 nonce 達成,不是改 hash 演算法本身。

SHA-256 跟 SHA-3-256 哪個比較好?

目前兩者都安全,設計差異大。SHA-256 普及度高(TLS、區塊鏈、Git 等都用),SHA-3 則是未來備案,萬一 SHA-2 出問題可以無縫切換。本工具用瀏覽器原生 API, 所以只支援 SHA-2 系列。要 SHA-3 可用 Node.js 的 createHash('sha3-256')

能用 hash 還原原文嗎?

不能。SHA-256 輸出 256 bit,輸入可以是任意長度,所以是「多對一」對應,理論上有無數個輸入對應同一個 hash。 所謂「破解 hash」其實是「用 rainbow table 查預先算好的常見輸入」,對複雜密碼或加 salt 的情況無效。

為什麼敢丟敏感資料進來算

因為運算走瀏覽器原生的 crypto.subtle.digest(),這是作業系統層級的 C 實作,你的輸入從頭到尾沒離開這個分頁。 大檔案 checksum 也一樣,讀檔與計算都在本機,算 1GB 的 ISO 也不會產生半個 byte 的上傳流量。

相關工具