MD5、SHA-256 などのハッシュを生成する方法
ハッシュは任意の入力 — パスワード、ファイル、メッセージ — を固定長の文字列に変換します。同じ入力からは常に同じハッシュが生成されますが、入力をわずかに変えるだけで全く異なるハッシュが得られます。これにより、ハッシュは整合性検証、パスワード保存、デジタル署名に欠かせないものになっています。
ハッシュの仕組み
ハッシュ関数は任意のサイズの入力を受け取り、固定サイズの出力を生成します:
| 入力 | SHA-256 ハッシュ(先頭 16 文字) |
|---|---|
| hello | 2cf24dba5fb0a30e... |
| Hello | 185f8db32271fe25... |
| hello! | ce06092fb948d9ff... |
1 文字を変える(小文字 h を大文字 H に)だけ、または追加するだけで、ハッシュ全体が変わることに注意してください。これはアバランシェ効果と呼ばれます。
一般的なハッシュアルゴリズム
| アルゴリズム | 長さ | 状態 | 用途 |
|---|---|---|---|
| MD5 | 32 文字 | 破られている(安全でない) | レガシーチェックサム、非セキュリティ用途 |
| SHA-1 | 40 文字 | 破られている(安全でない) | レガシーシステムのみ |
| SHA-256 | 64 文字 | 安全 | ファイル整合性、デジタル署名 |
| SHA-512 | 128 文字 | 安全 | 高セキュリティアプリケーション |
SHA-256 は現在ほとんどの用途で標準です。MD5 と SHA-1 は、それらを要求するレガシーシステムとやり取りする場合のみ使うべきです。
ハッシュを生成する方法
- アルゴリズムを選ぶ — MD5、SHA-1、SHA-256、SHA-384、SHA-512 から選択します。特別な理由がなければ SHA-256 を使ってください。
- テキストを入力するかファイルをアップロード — テキストを入力するか貼り付けるか、ハッシュ化するファイルを選択します。
- ハッシュをコピー — 結果は 16 進文字列で、検証、保存、比較に使用できます。
実用的な使い道
ファイルの整合性検証 — ファイルをダウンロードし、そのハッシュを公式に公開されているハッシュと比較します。一致すれば、ファイルは本物で破損していないことが確認できます。
パスワードの保存 — アプリケーションはパスワードそのものではなく、パスワードのハッシュを保存します。ログイン時、入力されたパスワードがハッシュ化され、保存されたハッシュと比較されます。
データの重複排除 — 大きなファイルをハッシュ化することで、バイト単位で比較せずに同一かどうか素早く判定できます。
API セキュリティの HMAC — HMAC(秘密鍵を使ったハッシュ)で API リクエストに署名し、転送中に改ざんされていないことを保証できます。
ヒント
- デフォルトで SHA-256 を使う — 安全で広くサポートされており、新規プロジェクトでの標準的な推奨です。
- セキュリティ用途で MD5 は絶対に使わない — MD5 の衝突(異なる入力から同じハッシュが生成される現象)は数秒で生成できます。安全性の不要なチェックサムには使えますが、整合性が重要な用途には不向きです。
- パスワードハッシュにはソルトを付ける — 各パスワードのハッシュ化前にランダムなソルトを加えると、レインボーテーブル攻撃を防げます。本番環境のパスワードハッシュには bcrypt または Argon2 を使ってください。
- ファイルのハッシュ化はローカルで動作 — ファイルはブラウザ内で処理されるため、大きなファイルでもデバイスから出ることはありません。
よくある質問
MD5、SHA-1、SHA-256 の違いは何ですか?
MD5 は 128 ビット(16 進 32 文字)、SHA-1 は 160 ビット(40 文字)、SHA-256 は 256 ビット(64 文字)のハッシュを生成します。MD5 と SHA-1 は暗号学的に破られているとされています。SHA-256 は現在安全で、整合性検証とセキュリティの両方に推奨されています。
ハッシュを逆変換して元のデータに戻せますか?
いいえ。ハッシュ関数は設計上一方向です。ハッシュから入力を数学的に逆算することはできません。ただし、よくあるパスワードは事前計算されたテーブル(レインボーテーブル)で見つかることがあるため、パスワードはハッシュ化前にソルトを加えることが重要です。
HMAC とは何ですか?
HMAC(Hash-based Message Authentication Code)はハッシュ関数と秘密鍵を組み合わせたものです。データの整合性と真正性の両方を検証 — 改ざんされていないこと、および秘密鍵を知る誰かが生成したことを証明します。
データはサーバーに送信されますか?
いいえ。すべてのハッシュ化は Web Crypto API を使ってブラウザ内で実行されます。テキストやファイルがデバイスから出ることはありません。