雜湊演算法識別工具(逆向判定)|自動判斷 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 也是相同的位數,如果知道來源系統所用的語言或庫,也請一併參考該資訊。
- 多行復制的雜湊轉儲(以換行符或空格分隔)也會在判定前自動去除內部的空白字元,因此可以直接貼上使用。
- 如果對判定結果沒有把握,最可靠的方法是檢視生成該雜湊值的應用程式原始碼或文件。
常見問題
$2b$ 或 $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 中選擇哪種攻擊模式)。