ハッシュ関数の概要・基礎知識
ハッシュ(ハッシュ値)は、テキストやファイルなど任意のデータから生成される固定長の文字列です。同じ入力からは必ず同じハッシュ値が生成され、入力が1ビットでも変わると出力は大きく変化します。一方ハッシュ値から元のデータを復元することはできない「一方向性」を持つため、ファイルの改ざん検知やパスワードの安全な保存に広く利用されてきました。本ツールはブラウザ標準のWeb Crypto APIを用い、MD5・SHA-1・SHA-256・SHA-384・SHA-512の5種類を同時生成します(MD5のみ独自実装)。すべての処理は端末上で完結するため、入力テキストが外部に送信されることはありません。
主要アルゴリズムの比較
| アルゴリズム | 出力長 | 強度 | 主な用途 |
|---|---|---|---|
| MD5 | 128bit / 32文字 | 低(衝突攻撃が現実的) | ファイル整合性の簡易チェック、レガシー連携 |
| SHA-1 | 160bit / 40文字 | 低(2017年に衝突実証) | Gitオブジェクト識別、レガシー署名 |
| SHA-256 | 256bit / 64文字 | 高(現役の業界標準) | TLS証明書、JWT、ブロックチェーン、APIシークレット保存 |
| SHA-384 | 384bit / 96文字 | 高 | 政府・金融用途、長期保管文書 |
| SHA-512 | 512bit / 128文字 | 非常に高い | 高セキュリティ要件、長期署名 |
使い方の流れ
- テキスト入力欄に、ハッシュ化したい文字列を貼り付けまたは入力します(複数行も可)。
- 入力に応じてリアルタイムで5種類のハッシュ値が同時表示されます。アルゴリズムごとの違いを一目で比較できます。
- 各ハッシュ値の右側にある「コピー」ボタンを押すと、その値だけをクリップボードに転送できます。
- ファイル整合性確認では、配布元の公式サイトに記載されたハッシュ値と、本ツールの出力を見比べて一致するか確認します。
- 必要に応じて、入力テキストを変更してハッシュの変化を観察できます。1文字追加するだけで全体が大きく変わることが体感できます。
こんな場面で使う
- ダウンロードファイルの改ざん検知:OSイメージやインストーラの公式SHA-256と、ローカルで再計算した値を照合し、転送中の破損や不正改ざんを検出できます。
- APIキーの安全な保存設計:シークレットを平文で保存せず、SHA-256化した値だけをDBに残すことでデータ漏えい時のリスクを減らせます(パスワード保存には別途bcrypt等が推奨)。
- Webhook署名の検証:StripeやGitHubのWebhookを受け取る際、ペイロードと共有シークレットからSHA-256ハッシュを生成し、リクエストヘッダーの署名と照合します。
- キャッシュキーの生成:URLやJSONボディからSHA-1ハッシュを取って、CDNやアプリのキャッシュキーに利用するパターンが一般的です。
- ブロックチェーン・NFT検証:BitcoinやEthereumで採用されているSHA-256・Keccak-256(SHA-3系)の挙動を学習する際の参考に使えます。
使う前に知っておきたい注意点
- パスワード保存にハッシュ関数単体を使うのは非推奨です。SHA-256でも単純なハッシュ化はレインボーテーブル攻撃やGPU総当たりに弱く、bcrypt・scrypt・Argon2といった「ストレッチング+ソルト付き」のパスワードハッシュ関数を使ってください。
- MD5・SHA-1は学術的に衝突攻撃が確認されています。新規システムのセキュリティ機能(署名・改ざん検知)には絶対に使わず、SHA-256以上を選択してください。
- 本ツールは入力をUTF-8として処理します。Shift-JISやEUC-JPで保存されたテキストとは結果が一致しないため、文字コードを揃えてご利用ください。
- ハッシュは復号できません。ハッシュ値しか手元にない状態で元データを復元する目的では使えない点に注意してください。
- MD5の出力は本ツールが内部実装で計算しています。Web Crypto APIはMD5を非対応としているため、暗号学的強度を要する用途には使わないでください。
用語の補足
- 衝突(コリジョン):異なる入力から同じハッシュ値が生成される現象。SHA-256では現実的に起こり得ないとされていますが、MD5・SHA-1では実証済みです。
- ソルト:パスワードハッシュに付加するランダム文字列。同じパスワードでも異なるハッシュ値になり、レインボーテーブル攻撃を防げます。
- HMAC:ハッシュ関数と秘密鍵を組み合わせたメッセージ認証コード。Webhook署名やAPI認証で広く使われます。