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

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

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

由雜湊值推斷所用演算法

雜湊值本身並不記錄產生它的演算法名稱。 但仍可加以推斷,線索有三:輸出的字元數(MD5為32、SHA-1為40、SHA-256為64、SHA-512為128)、字元種類(十六進位還是 Base64),以及 $2b$、$argon2id$ 之類的前綴。本工具便依這三點判定最可能的演算法。

不過這是推斷而非定論。 因為多種演算法共用同一輸出長度——64個十六進位字元既可能是 SHA-256,也可能是 SHA3-256 或 BLAKE2s。另一方面,像 bcrypt 與 Argon2 這樣帶有參數的字串格式,則可憑前綴確鑿分辨。判定全在瀏覽器內完成,所貼上的字串不會被送出。

判定的步驟

  1. 貼上雜湊字串 前後的空白會被忽略。
  2. 閱讀判定結果 候選演算法會按可能性由高到低列出。
  3. 確認字元數與字元種類 會一併顯示依據,讓您看清為何得出該候選。
  4. 查看有無前綴 若為 $ 開頭的格式,答案基本可收斂為一個。

用好本工具的小技巧

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

這些情境會用到

調查接手的系統

可先為資料庫中留存的雜湊究竟以何種方式產生找出方向。

判斷能否遷移

若為 bcrypt 或 Argon2,可連同參數保留並逐步遷移。

發現安全上的問題

若發現以 MD5 或 SHA-1 保存密碼,這本身就是待糾正之處。

讀懂日誌或傾印

面對來歷不明的長串十六進位時,可作為查究的線索。

雜湊的術語

MD5
128位元的雜湊函式。碰撞已可實際構造,因此不得用於密碼,也不得用於竄改偵測。
SHA-1
160位元的雜湊函式。與 MD5 同樣已被證實存在碰撞攻擊,不建議使用。
SHA-256/SHA-512
SHA-2 系列的函式。其速度快在別處是優點,用於保存密碼時反成弱點。
bcrypt
專為密碼設計的雜湊,字串中帶有成本係數,以 $2a$、$2b$ 開頭。
Argon2
2015年競賽的優勝密碼雜湊,以 $argon2id$ 開頭,還可調整記憶體用量。
鹽
每次雜湊都變換的隨機值。bcrypt 與 Argon2 會把它嵌進字串之中。

常見問題

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

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

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

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

可以。使用本站的雜湊批次計算與比較工具,輸入相同的字串即可實際計算出 MD5、SHA-1、SHA-256、SHA-512、SHA3-512、BCrypt、Argon2id 的值,並與此判定結果進行核對。SHA3-224、SHA3-256、SHA3-384 的候選可在SHA-3 雜湊計算工具中切換輸出長度進行確認。
工具君

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

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

這一侷限性在 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 中選擇哪種攻擊模式)。