ハッシュ方式の判定方法【文字列表現から特定】
まず結論
ハッシュ値の文字列から方式を見分けるときは、次の順で見るのが効率的です。
- 接頭辞(prefix)があるか - あればほぼ特定できる
- 区切り文字が何か -
$区切りは crypt 系の可能性が高い - 文字集合が何か - 16進か、Base64か、crypt系のアルファベットか
- 長さが何バイト相当か - 候補を絞る材料になるが、確定はできない
- 保存元の文脈 -
/etc/shadowか.htpasswdか、Django か
最も重要なのは次の 2 点です。
- 接頭辞付きの保存形式(
$argon2id$...など)は文字列だけでほぼ特定できる - プレーンな 16 進や Base64 だけでは候補を絞ることしかできない
接頭辞で特定できるもの(一覧)
| 見た目の特徴 | 方式 | 補足 |
|---|---|---|
$argon2id$... |
Argon2id | PHC文字列形式。v=, m=, t=, p= が続く |
$argon2i$... |
Argon2i | 同上 |
$2a$... / $2b$... / $2y$... |
bcrypt | 2桁コスト付き |
$1$... |
md5crypt | Unix系MD5パスワード保存形式 |
$5$... |
sha256crypt | plain SHA-256 ではない |
$6$... |
sha512crypt | plain SHA-512 ではない |
$apr1$... |
Apache APR1-MD5 | .htpasswd でよく見る |
{SHA}... |
SHA-1 digest の Base64 | Apache/LDAP系 |
{SSHA}... |
salted SHA-1 | LDAP系 |
pbkdf2_sha256$... |
PBKDF2-HMAC-SHA256 | Djangoなど |
{bcrypt}$2b$... |
bcrypt(Spring Securityラッパー付き) | Spring Securityの {id} 形式 |
プレーンな 16 進 / Base64 の長さと候補
| 生バイト長 | 16進文字数 | 主な候補 |
|---|---|---|
| 4 | 8 | CRC32 |
| 16 | 32 | MD5, MD4, NTLM系 |
| 20 | 40 | SHA-1, RIPEMD-160 |
| 28 | 56 | SHA-224, SHA-512/224 |
| 32 | 64 | SHA-256, SHA3-256, BLAKE2s-256, BLAKE3 |
| 48 | 96 | SHA-384, SHA3-384, BLAKE2b-384 |
| 64 | 128 | SHA-512, SHA3-512, BLAKE2b-512, Whirlpool |
注意: 長さが一致しても方式は一意に決まりません。特に 32/64/128 桁の 16 進は候補が多いため、これだけで断定すると外しやすいです。
実務での判定手順
1. まず先頭の記号を見る
最初の数文字でかなり絞れます。$argon2id$ なら Argon2、$2b$ なら bcrypt、$6$ なら sha512crypt といった具合です。「アルゴリズム本体」だけでなく「保存形式」も見ることが重要です。
2. 区切り文字の数を見る
$ が複数ある → パラメータ/salt/hash を一緒に持つ形式。{name} で始まる → LDAP/Spring Security 系。区切りが多い文字列ほど方式を特定しやすいです。
3. 文字種を見る
[0-9a-fA-F]のみ → 16進表現(文字数÷2=生バイト長)+/=あり → 通常の Base64-_あり → Base64url.と/が混ざり$区切り → crypt 系のアルファベット(bcrypt, sha256crypt など)
4. 長さを数える(候補を絞るため)
16進なら 生バイト長 = 文字数 / 2、Base64 なら 文字数 ≒ 4 × ceil(生バイト長 / 3) で計算します。ただし長さだけで確定はしないでください。
5. 文脈で確定する
保存元(/etc/shadow、.htpasswd、Django の auth_user、Spring Security の認証テーブルなど)を確認すれば、ほぼ 100% 確定できます。
よくある誤判定
- 64 hex = SHA-256 と決め打ちする - SHA3-256, BLAKE2s-256 も同じ長さ
$6$を plain SHA-512 と誤解する - これは sha512crypt というパスワードハッシュ文字列{SHA}を「SHA-256 か SHA-512 か」と思う - Apache/LDAP では Base64 化した SHA-1 digest を指す- パスワードハッシュとコンテンツハッシュを同じ扱いにする - 目的が全く異なる
まとめ
- prefix があるか → ほぼ特定可能
- 区切り文字が何か →
$区切りは crypt 系 - 文字集合が何か →
.が入っていれば Base64 ではないかも - 長さが何バイト相当か → 候補群を作る材料
- 保存元の文脈 → 最終確定
接頭辞付きの保存形式はかなり特定しやすい一方、単なる 16 進/Base64 は候補を絞るまでしかできません。100% 確定が必要なら、保存元の製品・設定・コードまで確認しましょう。
関連する記事
同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。
Windowsはなぜ今の形になったのか:開発者から見た歴代Windowsの進化
Windows 95からWindows 11までの変化を、見た目の年表ではなく、互換性、安定性、権限管理、ドライバ、Win32、.NET、セキュリティなどWindowsアプリ開発者の視点で整理します。
PowerShell実用コマンド集 ── 日常作業でよく使う小さな機能を増やす
PowerShellで日常作業に使う実用コマンドとして、Measure-Object、Group-Object、Select-String、Compare-Object、Tee-Object、Start-Transcriptなどの使いどころを整理します。
PowerShellスクリプト応用 ── ログ調査・アーカイブ・レポート化を安全に自動化する
PowerShellスクリプトでログ調査、CSVレポート、古いログのアーカイブ、証跡保存、タスクスケジューラ実行までを安全に進める実務手順を整理します。
PowerShellコマンドの基本 ── まず覚える操作と安全な使い方
PowerShell初心者が実務で迷わないように、コマンドレットの探し方、パイプライン、ファイル操作、CSV処理、実行ポリシー、事故を避ける確認手順までを整理します。
Windowsで「Windows によって PC が保護されました」が出る理由
Windowsアプリ配布時にSmartScreen警告が出る理由を、コード署名、EV/OV証明書、Azure Artifact Signing、MSIX、Microsoft Store、ClickOnce、社内配布、App Controlまで実務目線で整理します。
関連トピック
このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。
Windows技術トピック
Windows 開発、不具合調査、既存資産活用の技術トピックをまとめた入口です。
このテーマがつながるサービス
この記事は次のサービスページにつながります。近い入口からご覧ください。
既存資産活用・移行支援
COM / ActiveX / OCX、32bit / 64bit 制約を抱える既存資産の活用と移行を支援します。