Hash 產生器把你輸入的文字換算成固定長度的指紋,一次同時給出 MD5、SHA-1、SHA-256、SHA-512 四組結果,不必分別切換演算法就能對照。hash 的用途是「確認兩份內容是否完全相同」,不是加密——它是單向的,算完之後沒有辦法反推回原文。四種計算全部在你的瀏覽器裡完成,輸入的文字不會離開這台電腦。
使用步驟
- 把要計算的文字貼進上方輸入框。沒有「開始計算」按鈕:每次輸入變動就會重新計算,四張結果卡片會跟著更新。
- 四張卡片由上到下固定是 MD5、SHA-1、SHA-256、SHA-512,各自顯示完整的小寫十六進位 digest(長度依序為 32、40、64、128 個字元)。
- 計算進行中卡片會顯示「計算中…」並轉為灰字,文字變回一般顏色時代表這一批數值已經算完。
- 用每張卡片右上角的複製按鈕取走該演算法的 hash。四組是各自獨立複製的,不會一次全帶走。
- 輸入框空著時顯示的不是錯誤,而是「空字串」的 hash——MD5 是
d41d8cd98f00b204e9800998ecf8427e,SHA-256 是e3b0c442…7852b855。看到這兩串就知道輸入框真的清空了。 - 要換一組輸入直接改寫或全選刪除即可,這個工具沒有清除鈕,也不會保留任何歷史紀錄。
什麼時候用得上
確認兩段長文字一字不差
兩份設定檔內容、兩段憑證、兩則從不同管道收到的公告,用眼睛比對很容易漏掉一個空白或全形標點。各自算一次 SHA-256,只要對照前後各八個字元就能判斷是否相同;相同輸入必定得到相同輸出,而只要差一個位元,整串 digest 就會完全不一樣(avalanche effect),不會只變幾個字元。
除錯第三方 API 的簽章
金流、簡訊、開放平台的介面常要求把參數依規則串成一長串再取 md5() 或 sha256() 當作 signature。先把文件範例裡的待簽字串貼進來手算一次期望值,再和你程式輸出的比對,就能分辨問題出在串接順序、少了某個參數,還是字元編碼。
產生穩定的 cache key 或內容指紋
要為一段查詢字串、一組請求參數或一份範本內容產生固定長度的 key 時,SHA-256 是安全的預設值:同樣輸入永遠得到同樣的 64 個字元,長度不隨輸入變長,也不含需要跳脫的字元。
對照舊系統的既有 hash
維護十幾年前的資料庫時,常會遇到欄位裡存的是 MD5 或 SHA-1。要驗證遷移腳本有沒有算對,把原始字串貼進來比對這裡的結果最快。這也是本工具保留 MD5 與 SHA-1 的唯一理由——相容舊資料,不是推薦你在新系統使用。
限制與注意事項
- hash 不是加密,是單向摘要。這裡沒有反向按鈕,任何工具都做不到真正的「解 hash」。所謂的「MD5 解密」網站是預先算好大量常見字串的對照表(rainbow table)再查表,對
123456這種密碼有效,對一段隨機文字完全無效。 - 這是「文字 hash」,不是「檔案 hash」。輸入框的字串會先用 UTF-8 編碼成位元組再計算,所以結果等同於對「同樣位元組、且結尾沒有換行」的檔案跑
md5sum。如果拿去和sha256sum file.txt比對卻不符,最常見的原因是檔案結尾多了一個\n。工具也不支援檔案上傳,無法用來校驗 ISO 或安裝檔。 - 換行寫法會改變 hash。
\r\n(Windows)和\n(Linux/macOS)是不同的位元組,算出來的 digest 必然不同。要注意的是瀏覽器的 textarea 依 HTML 規範會把換行正規化成 LF,所以即使你從 Windows 記事本貼上 CRLF 內容,這裡算的仍是 LF 版本的 hash。 - MD5 與 SHA-1 已被實際攻破:MD5 的碰撞在 2004 年就被構造出來,SHA-1 則在 2017 年的 SHAttered 被實作出碰撞、2020 年進一步做到 chosen-prefix 碰撞。兩者都不該再用於數位簽章、憑證或防篡改驗證,只適合非安全用途的校驗與相容舊系統。而不論哪一種,都不要拿來存密碼——純 SHA-256 在一張現代 GPU 上每秒能算數十億次,密碼要用 bcrypt、scrypt 或 Argon2 這類刻意設計得很慢、且內建 salt 的 KDF。
- SHA-1、SHA-256、SHA-512 走的是瀏覽器內建的 Web Crypto(
crypto.subtle.digest),而 Web Crypto 只在 secure context 可用——也就是 HTTPS 或localhost。若透過純 http 開啟這個頁面,這三欄會算不出結果;MD5 是純 JavaScript 實作,不受此限制。 - 工具只輸出原始 digest。沒有 HMAC、沒有 salt 欄位、沒有 Base64 輸出、沒有大小寫切換,也沒有 SHA-384、SHA-3 或 BLAKE 系列。若你要比對的對象是大寫或 Base64,請自行轉換後再比。
常見問題
瀏覽器不是不支援 MD5 嗎?這裡的 MD5 是怎麼算的?
這個觀察是對的。Web Crypto 的 crypto.subtle.digest 只提供 SHA-1、SHA-256、SHA-384、SHA-512,規範刻意排除了 MD5,因為它早已被視為不安全,不該由瀏覽器提供官方途徑。本工具的 MD5 因此改用 spark-md5 這個純 JavaScript 實作,程式碼隨頁面一起下載、在你的瀏覽器裡執行,同樣不需要伺服器參與。SHA 三兄弟則走瀏覽器原生的 Web Crypto。
我在這裡算的 SHA-256 和後端算的不一樣,該怎麼查?
照這個順序檢查:一、字串結尾是不是多或少了換行;二、換行是 \r\n 還是 \n;三、後端的編碼是不是 UTF-8(若是 UTF-16 或 Big5,中文字的位元組完全不同);四、前後有沒有被 trim 掉的空白,或從網頁複製時帶進來的 BOM 與全形空白;五、對方是不是其實在做 HMAC 或加了 salt;六、對方輸出的是不是 Base64 或大寫十六進位。純 hash 沒有任何隨機成分,同樣的位元組一定得到同樣的結果,所以不一致必然是輸入或表示法的差異。
我輸入的文字會被上傳嗎?
不會。四組 hash 全在你的裝置上算完:MD5 用打包進頁面的 spark-md5,SHA-1/SHA-256/SHA-512 用瀏覽器內建的 crypto.subtle.digest,整個過程沒有發出任何網路請求。你可以把網路斷線後再輸入一次來驗證——只要是 HTTPS 已經載入完成的頁面,四組結果照樣算得出來。
有沒有辦法從 hash 反推回原文?
沒有。hash 會把任意長度的輸入壓成固定長度的輸出(SHA-256 永遠是 32 個位元組),資訊在過程中被大量丟棄,數學上就不存在唯一的逆運算。能被「查出來」的只有那些已經被人算過並記錄下來的常見字串。反過來說,這也是為什麼不能拿 hash 來保護低熵資料:把身分證號或手機號碼做 SHA-256,因為可能值有限,攻擊者全部窮舉一遍就能反查,這種欄位需要 salt 或 HMAC。
該用哪一種?
新專案一律從 SHA-256 開始,它是目前的業界預設值,安全性與效能都夠。SHA-512 在 64 位元平台上通常反而更快,適合對長內容做摘要,或需要更長輸出當作 key 材料時使用。MD5 與 SHA-1 只在對接既有系統時才用,例如舊 API 的簽章規則或舊資料庫欄位。若目的是「防止內容被惡意替換」,光有 hash 不夠,需要簽章或 HMAC——因為攻擊者能同時改內容和 hash。
可以用來校驗我下載的安裝檔嗎?
不行。這個工具只吃輸入框裡的文字,沒有檔案上傳,也不適合貼進幾百 MB 的內容。請改用系統內建指令:Linux 的 sha256sum file.iso、macOS 的 shasum -a 256 file.iso、Windows 的 certutil -hashfile file.iso SHA256。算完的字串可以貼回這裡跟官方公布值並排比對。