100%プライベート:ブラウザ内蔵のWeb Crypto APIとローカルMD5実装を使用。ネットワークリクエストはゼロです。

ハッシュ生成

ハッシュがここに表示されます...

全アルゴリズム一括

同じ入力を5つのアルゴリズムすべてで同時にハッシュ化します。

MD5
SHA-1
SHA-256
SHA-384
SHA-512

ハッシュ比較

2つのハッシュ値をペーストして一致を確認 — ファイル整合性の検証やチェックサムの比較に便利です。

ハッシュ関数とは?

ハッシュ関数とは、任意の長さの入力をハッシュ、ダイジェスト、またはチェックサムと呼ばれる固定長の出力に変換する数学的アルゴリズムです。ハッシュ関数は現代の暗号技術の基盤であり、デジタル署名、証明書検証、パスワード保存、データ整合性チェック、コンテンツアドレッシングに使用されています。

暗号ハッシュ関数を定義する3つの特性:決定性(同じ入力は常に同じ出力を生成)、雪崩効果(入力の小さな変更が出力を大幅に変化させる)、一方向性(ハッシュから元の入力を復元できない)。安全なハッシュ関数はさらに衝突攻撃にも耐性があります — 同じハッシュを生成する2つの異なる入力を見つけることです。

ハッシュアルゴリズム比較

アルゴリズム 出力長 セキュリティ状態 一般的な用途
MD5 128ビット (16進数32文字) 危殆化 チェックサム、キャッシュキー、セキュリティ以外の重複排除
SHA-1 160ビット (16進数40文字) 非推奨 レガシーシステム、GitオブジェクトID(移行中)
SHA-256 256ビット (16進数64文字) 安全 TLS証明書、コード署名、Bitcoin、JWT
SHA-384 384ビット (16進数96文字) 強固 TLS 1.2+、政府・コンプライアンス要件
SHA-512 512ビット (16進数128文字) 強固 高セキュリティアプリケーション、デジタルフォレンジック、アーカイブ

JavaScriptでWeb Crypto APIを使ったハッシュ

モダンブラウザはcrypto.subtle.digest() APIを公開しており、依存関係なしに完全にクライアントサイドでSHAハッシュを計算できます。以下の例ではSHA-256ハッシュを計算し、結果を16進数文字列に変換しています:

async function sha256(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', data);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

// Usage
const hash = await sha256('hello world');
console.log(hash);
// => b94d27b9934d3e08a52e52d7da7dabfac484efe04294e576f4...

Web CryptoはMD5をサポートしていません。MD5は暗号学的に安全とは見なされていないためです。MD5にはフォールバックとしてピュアJavaScript実装が使用されています。

ユースケースに適したハッシュアルゴリズムの選択

ハッシュ関数はソフトウェアエンジニアリングで異なる目的に使われます — データ整合性の検証からパスワード保存、デジタル署名まで。間違ったアルゴリズムを選ぶと、セキュリティ脆弱性にさらされたり、不要なパフォーマンスオーバーヘッドが発生します。

ハッシュアルゴリズム選択ガイド

  • パスワード保存 → bcrypt、scrypt、またはArgon2: パスワードにMD5、SHA-1、SHA-256を使用しないでください。これらの汎用ハッシュは速すぎます — GPUを持つ攻撃者は1秒に数十億のSHA-256ハッシュを試行できます。パスワードハッシュアルゴリズムは意図的に遅く、設定可能なワークファクターを含みます。
  • データ整合性 → SHA-256: ファイルダウンロードの検証、チェックサム、転送中のデータ整合性の確認に使用します。SHA-256はほとんどのアプリケーションで許容可能なパフォーマンスで強力な衝突耐性を提供します。
  • ハッシュテーブル/重複排除 → xxHashまたはMurmurHash: 暗号学的セキュリティよりも速度が必要な場合(キャッシュキー、ブルームフィルター、データ重複排除)、非暗号学的ハッシュ関数はSHA-256より10〜100倍高速です。
  • デジタル署名 → SHA-256またはSHA-3: ドキュメント、証明書、JWTトークンの署名に使用します。
  • API認証 → HMAC-SHA256: Webhook署名とAPIリクエスト認証に使用します。HMACはハッシュに秘密鍵を追加し、改ざんを防止します。認証にHMACなしの単純なハッシュを使用しないでください。

非推奨で安全でないハッシュアルゴリズム

  • MD5: 衝突攻撃は簡単です — 2つの異なるファイルが数秒で同じMD5ハッシュを生成できます。セキュリティ以外のチェックサム(安全なハッシュが利用できない場合のダウンロード整合性の検証など)にのみ許容されます。
  • SHA-1: 2017年に衝突攻撃が実証されました(SHAttered)。Gitは内部的にまだSHA-1を使用していますが、SHA-256に移行中です。新しいセキュリティアプリケーションには使用しないでください。

よくある質問

ハッシュ関数とは何ですか?

ハッシュ関数は入力(テキスト、ファイル、またはバイナリデータ)を受け取り、固定長の文字列を生成します。同じ入力は常に同じハッシュを生成しますが、入力の変更(1文字でも)は完全に異なるハッシュを生成します。これにより、ハッシュはデータの変更検出、ダウンロードの検証、元の値を保存せずにパスワードを保存するのに役立ちます。

MD5とSHA-256の違いは何ですか?

MD5は128ビット(16進数32文字)のダイジェストを生成し、計算が高速ですが、暗号学的な衝突を意図的に作成できます — 2つの異なる入力から同じMD5ハッシュを生成できます。これによりMD5はセキュリティ目的には不適切です。SHA-256は256ビットのダイジェストを生成し、既知のすべての攻撃に対して安全です。セキュリティが重要なアプリケーションにはSHA-256またはSHA-512を使用してください。MD5はキャッシュキーや重要でないチェックサムなどのセキュリティ以外の用途にのみ使用可能です。

ハッシュは可逆的ですか?ハッシュを復号化できますか?

いいえ — ハッシュは設計上、一方向の操作です。ハッシュから元の入力を復元するアルゴリズムは存在しません。ただし、短い入力や一般的な入力はブルートフォースや事前計算されたレインボーテーブルで見つけることができます。そのため、パスワードはSHA-256のような高速アルゴリズムではなく、bcryptやArgon2のような低速でソルト付きのアルゴリズムでハッシュする必要があります。このページのハッシュアルゴリズムはデータ整合性とチェックサム用に設計されており、パスワード保存用ではありません。

パスワードのハッシュにSHA-256を使用すべきですか?

いいえ。SHA-256やその他の汎用ハッシュ関数は意図的に高速であり、現代のハードウェアではブルートフォース攻撃が容易になります(毎秒数十億ハッシュ)。パスワードには専用の低速ハッシュアルゴリズムを使用してください:bcrypt(最も広くサポート)、Argon2id(最新のベストプラクティス、Password Hashing Competitionの優勝者)、またはscrypt。これらは計算コストが高く設計されており、レインボーテーブル攻撃を防ぐためのソルト処理が組み込まれています。

関連開発者ツール