雜湊演算法識別工具(逆向判定)|自動判斷 MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2

只需貼上一段疑似雜湊值的字串,本工具即可根據字元數、字元種類和字首,判斷它最可能是由 MD5、SHA-1、SHA-256、SHA-512、SHA-3、BCrypt、Argon2 中的哪種演算法生成的。判定過程完全在瀏覽器內完成。

雜湊值本身並不會記錄生成時所用的演算法名稱。由於多種演算法可能產生相同的輸出長度,此判定結果只是基於字元數、字元種類和字首得出的"最可能的推測",並非100%確定的結論。

雜湊判定小提示

  • 判定僅以字元數、字元種類(十六進位制還是 Base64)和字首為線索,並不會實際重新計算雜湊值進行驗證。它只是展示"從格式上可以推測出的候選項"。
  • BCrypt($2a$/$2b$/$2y$)和 Argon2($argon2id$ 等)的字首本身就嵌入了演算法名稱和引數,因此可以以較高的置信度判定。
  • 64位十六進位制最常見的是 SHA-256,但 SHA3-256 也是相同的位數,如果知道來源系統所用的語言或庫,也請一併參考該資訊。
  • 多行復制的雜湊轉儲(以換行符或空格分隔)也會在判定前自動去除內部的空白字元,因此可以直接貼上使用。
  • 如果對判定結果沒有把握,最可靠的方法是檢視生成該雜湊值的應用程式原始碼或文件。

常見問題

僅憑雜湊值本身是不可能做到的。由於存在像 SHA-256 和 SHA3-256 這樣輸出位數完全相同的演算法,僅看輸出結果無法下定論。若要確切知道,需要檢視生成該雜湊值的應用程式的原始碼或文件。

這是因為 BCrypt 和 Argon2 是專為密碼儲存而設計的,它們採用了一種"模組化加密格式",會在雜湊值開頭以文本形式嵌入 $2b$$argon2id$ 之類的演算法名稱和引數。只要能讀取到這些資訊,就能唯一確定所使用的演算法。

不能。本工具僅根據雜湊值的"外觀"推測演算法種類,完全不提供從雜湊值還原原始資料(例如暴力破解)的功能。

MD5 和 SHA-1 的抗碰撞性已被攻破,如果在密碼儲存場景中發現它們,應將其視為安全風險處理。建議將系統遷移到專為密碼儲存設計的 BCrypt 或 Argon2id。

可以。使用本站的雜湊批次計算與比較工具,輸入相同的字串即可實際計算出 MD5、SHA-1、SHA-256、SHA-512、SHA-3、BCrypt、Argon2id 的值,並與此判定結果進行核對。
ツールくん

閒話 ― 為什麼僅憑雜湊值無法確定所使用的演算法

雜湊函式的職責是"將輸入資料轉換為固定長度的輸出",而這個輸出(摘要)本身並不包含任何指明演算法名稱的後設資料。這是設計上的必然結果:如果嵌入後設資料,輸出長度就會發生變化,從而破壞"固定長度"這一密碼學雜湊函式的重要性質。因此,我們能夠依據的線索只有輸出的"外觀"——即字元數和字元種類。

這一侷限性在 SHA-2 系列與 SHA-3 系列的關係上表現得最為明顯。SHA-256 與 SHA3-256 的內部結構完全不同(SHA-2 採用 Merkle–Damgård 結構,SHA-3 採用海綿結構),但兩者都被設計成輸出 256 位、即十六進位制 64 位的結果。SHA-224 與 SHA3-224、SHA-384 與 SHA3-384、SHA-512 與 SHA3-512 之間也存在同樣的關係,僅憑輸出長度無法斷定究竟是哪一個。由於在實際應用中 SHA-2 系列的普及率遠高於 SHA-3 系列,本工具在位數一致時會優先給出 SHA-2 系列作為候選,但這終究只是基於統計趨勢的推測。

另一方面,BCrypt 和 Argon2 這類專為密碼雜湊設計的演算法,為了消除這種不確定性,採用了一種被稱為"模組化加密格式"的自描述格式。例如 $2b$12$...$argon2id$v=19$...,會將演算法名稱、版本和引數以文本形式嵌入到開頭,使得僅憑雜湊值本身就能唯一還原出計算方式。遇到這種格式的雜湊值時,就可以進行確定性的判定。

這類判定工作在實際場景中確有用武之地,例如調查從遺留系統中發掘出的密碼轉儲資料,或是在被稱為 CTF(奪旗賽)的安全競賽中進行密碼破譯挑戰。只要能從雜湊值縮小演算法範圍,就能高效地決定接下來應嘗試哪種分析工具或破解手法(例如在 Hashcat 中選擇哪種攻擊模式)。