ハッシュ・暗号化
テキストのハッシュ生成、AES暗号化、Base64変換、パスワード強度チェックをブラウザ内で安全に実行できます。
データはサーバーに送信されないため、機密情報も安心して処理できます。開発・テスト・学習用から本番環境の暗号化検証まで、幅広い用途に対応します。
SHA-256/MD5ハッシュ生成、AES暗号化・復号化、Base64エンコードをブラウザ内で実行。セキュリティ開発・テストに最適。
🔑 ハッシュ生成
テキストのハッシュ値を生成します(SHA-256、SHA-1、MD5)
🔒 AES暗号化・復号化
AES-256で暗号化・復号化を行います
📦 Base64エンコード・デコード
テキストをBase64形式に変換、またはBase64からデコードします
🛡️ パスワード強度チェック
パスワードの強度を判定します
💡 こんな時に便利
- ハッシュ生成: パスワードのハッシュ化、ファイル整合性チェック
- 暗号化: 機密データの暗号化、安全なデータ保存のテスト
- Base64: バイナリデータのテキスト変換、API開発
- パスワード強度: セキュアなパスワード作成の補助
❓ よくある質問
Q. 入力したデータはサーバーに送信されますか?
いいえ、すべてブラウザ内で処理されます。データはサーバーに送信されないため、機密情報も安心して利用できます。
Q. SHA-256とMD5の違いは?
SHA-256は現在推奨される安全なハッシュアルゴリズムです。MD5は古く、セキュリティ的に脆弱なため、新規開発では使用を避けるべきです。
Q. AES暗号化は安全ですか?
AES-256は現在最も安全な暗号化方式の一つです。ただし、キー(パスワード)が弱いと安全性が損なわれます。強力なパスワードを使用してください。
Q. 本番環境で使用できますか?
このツールは開発・テスト・学習用です。本番環境での暗号化には、サーバーサイドの適切なライブラリとセキュリティ対策を実装してください。
🔐 ハッシュ化と暗号化の決定的な違い
セキュリティの分野では「ハッシュ化」と「暗号化」はどちらも重要ですが、全く異なる目的で使われます。これを理解することは、データ保護の最適な方法を選択するために必須です。
ハッシュ化(一方向変換)
- 定義: 元のデータ(平文)を固定長の文字列(ハッシュ値)に変換する一方向の処理です。逆算してハッシュ値から元のデータを復元することは原理的に不可能です。
- 特徴: 同じ入力に対しては常に同じハッシュ値が生成されます(決定論的)
- 用途: パスワード検証、ファイル整合性チェック、メッセージ認証
- 例: パスワード「MyPassword123」のSHA-256は常に「abc123...」になります
暗号化(双方向変換)
- 定義: 元のデータを暗号化キー(秘密鍵)を使って読めない形に変換し、同じキーを使えば元のデータに復号化できます。
- 特徴: キーを知らない限り、暗号文から元のデータを復元することはほぼ不可能です(計算上の安全性)
- 用途: 機密データの保護、通信の暗号化、個人情報の安全な保存
- 例: AES-256で「MyPassword123」を暗号化するたびに異なる暗号文が生成される(正しいキーで復号化すれば元に戻る)
| 項目 | ハッシュ化 | 暗号化 |
|---|---|---|
| 方向性 | 一方向(復号化不可) | 双方向(復号化可能) |
| キー要件 | 不要 | 必須(秘密鍵) |
| 出力の確定性 | 決定論的(常に同じ) | 非決定論的(毎回異なる) |
| 用途例 | パスワード保存 | 機密データ保護 |
🔑 SHA-256のアルゴリズム仕組み
SHA-256(Secure Hash Algorithm 256-bit)は、現在最も広く使われているハッシュアルゴリズムです。米国国立標準技術研究所(NIST)によって標準化され、ビットコイン、TLS/SSL通信、データベースセキュリティなど、無数のシステムで採用されています。
SHA-256の基本特性
- 出力サイズ: 常に256ビット(64文字の16進数)を出力します
- 決定論的: 同じ入力に対しては常に同じハッシュ値を生成します
- 一方向性: ハッシュ値から元のデータを復元することは計算上不可能です
- 雪崩効果: 入力が1ビット変わるだけで、出力は大きく変わります
SHA-256が安全な理由
- 衝突回避性: 異なる入力から同じハッシュ値が生成される可能性は、理論的に2^128回の試行が必要で、現実的に不可能です
- 高いセキュリティマージン: SHA-1は脆弱性が発見されましたが、SHA-256は現在のところ安全です
- 国際的な信頼: NICTをはじめ多くの政府機関やセキュリティ専門家が採用を推奨しています
他のハッシュアルゴリズムとの比較
| アルゴリズム | 出力サイズ | 推奨状況 | 用途 |
|---|---|---|---|
| MD5 | 128ビット | 非推奨 | レガシーシステムのみ |
| SHA-1 | 160ビット | 廃止予定 | 脆弱性が報告済み |
| SHA-256 | 256ビット | 推奨 | 最新のセキュア環境 |
| SHA-512 | 512ビット | 推奨 | 超高セキュリティが必要な場合 |
🛡️ パスワード保存のベストプラクティス
データベースに保存するパスワードは、絶対に平文(そのまま)で保存してはいけません。適切なハッシュ化とソルト(salt)を使用することが、OWASP(Open Web Application Security Project)やNISTのセキュリティガイドラインで必須とされています。
絶対に避けるべきパスワード保存方法
- ❌ 平文保存: データベースが漏洩した場合、全ユーザーのパスワードが露出します
- ❌ MD5やSHA-1でハッシュ化: 既に脆弱性が報告されており、レインボーテーブル攻撃に弱いです
- ❌ ソルトなしでハッシュ化: 同じパスワードは同じハッシュ値を生成するため、辞書攻撃に弱いです
推奨されるパスワード保存方法
-
✅ bcrypt: パスワード専用のハッシュ関数。自動的にソルトが生成され、計算コストが調整可能です(PHP:
password_hash()) - ✅ Argon2: 最新のハッシュアルゴリズム。メモリにも時間にも強く、GPU攻撃に耐性があります(PHP 7.2+)
- ✅ PBKDF2: NIST推奨。反復回数を多く設定することで、ブルートフォース攻撃に耐性をつけます
ソルト(Salt)とは?
ソルトは、ハッシュ化前にパスワードに追加されるランダムな文字列です。同じパスワードでも異なるソルトを使えば、全く異なるハッシュ値が生成されます。これにより、以下の攻撃を防げます:
- レインボーテーブル攻撃: 事前に計算されたハッシュ値との照合が無効化される
- 辞書攻撃: 同じパスワード同士の共通性が排除される
実装例(PHP)
// パスワードのハッシュ化(登録時)
$hashed_password = password_hash($user_password, PASSWORD_ARGON2ID);
// パスワードの検証(ログイン時)
if (password_verify($input_password, $hashed_password)) {
// パスワードが正しい
} else {
// パスワードが間違っている
}
パスワード入力時の注意点
- HTTPS通信を必須: ログイン画面は必ずHTTPSで配信し、通信の盗聴を防ぐ
- パスワード強度の要件設定: 最小限8文字以上、大文字・小文字・数字・記号の混在を推奨
- 多要素認証(MFA)の導入: パスワード漏洩時のリスク軽減に効果的
- ログイン試行回数の制限: ブルートフォース攻撃を防ぐため、失敗時は段階的に待機時間を増やす