ハッシュ判定ツール(逆引き)|MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2を自動判定
ハッシュ値らしき文字列を貼り付けるだけで、文字数・文字種・プレフィックスからMD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2のうちどのアルゴリズムで生成された可能性が高いかを判定します。判定はすべてブラウザ内で完結します。
ハッシュ値そのものには生成に使ったアルゴリズム名は記録されていません。同じ出力長を複数のアルゴリズムが共有する場合があるため、この判定結果は文字数・文字種・プレフィックスに基づく「最も可能性の高い推測」であり、100%の断定ではありません。
ハッシュ判定のヒント
- 判定は文字数・文字種(16進数かBase64か)・プレフィックスのみを手がかりにしており、実際にハッシュを計算し直して検証しているわけではありません。あくまで「形式から推測できる候補」を示すツールです。
- BCrypt(
$2a$/$2b$/$2y$)とArgon2($argon2id$等)はプレフィックス自体にアルゴリズム名とパラメータが埋め込まれているため、高い確度で判定できます。 - 64桁の16進数はSHA-256が最も一般的ですが、SHA3-256も同じ桁数になるため、掲載元のシステム(言語・ライブラリ)が分かっている場合はそちらの情報も参考にしてください。
- 複数行にコピーされたハッシュダンプ(改行・スペース区切り)も、内部の空白文字を自動的に除去してから判定するのでそのまま貼り付けて構いません。
- 判定結果に確信が持てない場合は、ハッシュの生成元(アプリケーションのソースコードやドキュメント)を確認するのが最も確実です。
よくある質問
$2b$や$argon2id$のようなアルゴリズム名・パラメータをテキストとして埋め込む「モジュラークリプト形式」を採用しているためです。この情報が読み取れる限り、アルゴリズムを一意に確定できます。
余談ですが ― なぜハッシュ値だけではアルゴリズムを断定できないのか
ハッシュ関数は「入力データを固定長の出力に変換する」ことが仕事であり、その出力(ダイジェスト)自体にはアルゴリズム名を示すメタデータは一切含まれません。これは設計上の必然です。もしメタデータを埋め込むと出力長が変わってしまい、「固定長」という暗号学的ハッシュ関数の重要な性質が崩れてしまいます。そのため私たちが手がかりにできるのは、出力の「見た目」(文字数・文字種)だけということになります。
この制約が最も顕著に現れるのがSHA-2系とSHA-3系の関係です。SHA-256とSHA3-256はまったく異なる内部構造(SHA-2はMerkle-Damgård構造、SHA-3はスポンジ構造)を持つのに、どちらも256ビット=16進数64桁の出力になるよう設計されています。SHA-224とSHA3-224、SHA-384とSHA3-384、SHA-512とSHA3-512も同様の関係にあり、出力長だけを見て一方に断定することはできません。実務ではSHA-2系が圧倒的に普及しているため、本ツールも桁数が一致した場合はSHA-2系を優先候補として提示していますが、これはあくまで統計的な傾向に基づく推測です。
一方でBCryptやArgon2のようなパスワードハッシュ化専用のアルゴリズムは、この曖昧さを解消するために「モジュラークリプト形式」という自己記述的なフォーマットを採用しています。$2b$12$...や$argon2id$v=19$...のように、先頭にアルゴリズム名・バージョン・パラメータをテキストとして埋め込むことで、ハッシュ値だけを見ても計算方法を一意に復元できるようにしているのです。このような形式のハッシュに出会ったら、断定的な判定が可能になります。
こうした判定作業は、レガシーシステムから発掘されたパスワードダンプの調査や、CTF(Capture The Flag)と呼ばれるセキュリティ競技での暗号解読チャレンジで実際に必要とされる場面があります。ハッシュ値からアルゴリズムを絞り込めれば、次に試すべき解析ツールやクラッキング手法(Hashcat等の攻撃モードの選択)を効率的に決められるためです。