MD5 Hash Generator
任意のテキストからMD5ハッシュを生成
入力テキスト
MD5ハッシュ
MD5ハッシュがここに表示されます…
MD5ハッシュとは?
MD5(Message-Digest Algorithm 5)は、入力のサイズに関わらず固定128ビット(16バイト)のダイジェストを生成する暗号ハッシュ関数です。1992年にRonald RivestによってRFC 1321として公開されたMD5は、MD4より高速な後継として設計され、インターネット上で最も広く使用されるハッシュ関数のひとつとなりました。このアルゴリズムは入力を512ビットブロック単位で処理し、各ラウンドで異なる非線形関数を使用する4ラウンド×16オペレーションを経て、32文字の16進数フィンガープリントを生成します。
ハッシュ関数は一方向変換です。入力からハッシュは即座に計算できますが、ハッシュのみから元の入力を復元することはできません。入力の1ビットの変更でも全く異なるダイジェストが生成されます — これをアバランチ効果と呼びます。MD5は無限の入力空間を固定128ビットの出力空間にマッピングするため、異なる2つの入力が同じハッシュを生成するコリジョンは数学的に必然ですが、安全なハッシュ関数ではそれを計算的に実行不可能にします。
2004年以降、研究者たちはMD5に対する実用的なコリジョン攻撃を実証しており、デジタル署名・証明書・コリジョン耐性が必要な用途ではMD5は安全とみなされません。しかしMD5は非セキュリティ目的では依然広く使用されています。ダウンロード後のファイル整合性検証、キャッシュキーの生成、コンテンツの重複排除、文字列からの決定論的識別子の作成などです。こうした用途では、アルゴリズムの速度とユビキタスなライブラリサポートが実用的な選択肢となります。 2008年、Marc Stevensらは選択プレフィックスコリジョン攻撃を発表しました。攻撃者が任意のプレフィックスを持つ2つのドキュメントを同じダイジェストで作成できることを意味します。この手法は2008年のChaos Communication Congressで不正な認証局証明書を構築することにより実証されました。2012年のFlameマルウェアはその後、選択プレフィックスコリジョンを悪用してMicrosoftのコード署名証明書を偽造し、マルウェアが正規のWindows Updateパッケージを装えるようにしました。これらの実際の攻撃により、ハッシュされる入力に攻撃者が影響を与えられる信頼アンカー用途にはアルゴリズムは暗号的に破られていることが確認されました。
このMD5ジェネレーターを使う理由
インストールやコード記述なしにMD5ハッシュを即座に生成できます。テキストを貼り付けるだけでリアルタイムに32文字の16進数ダイジェストが得られます。
MD5のユースケース
MD5と他のハッシュアルゴリズムの比較
MD5は一般的なハッシュアルゴリズムの中で最速かつ最短ですが、セキュリティ保証は最も弱くなります。以下の表では各アルゴリズムのダイジェストサイズ・標準・適切なユースケースを比較します。
| アルゴリズム | ダイジェストサイズ | 16進数の長さ | 標準 | 適した用途 |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
MD5の仕組み
MD5はMerkle-Damgård構造を通じて入力を処理します。メッセージは512ビットの倍数にパディングされ、ブロックに分割され、各ブロックはあらかじめ計算されたサイン由来の定数と入力を混合する4ラウンド×16ビット演算を経て処理されます。結果は最終ダイジェストとなる128ビットの状態です。
各ラウンドは4つの32ビット状態ワード(A、B、C、D)のうち3つに異なる非線形補助関数を適用します。ラウンド1ではF(B,C,D) = (B AND C) OR (NOT B AND D) — ビット単位の条件選択器を使用します。ラウンド2ではG(B,C,D) = (B AND D) OR (C AND NOT D) — 補完選択器を使用します。ラウンド3ではH(B,C,D) = B XOR C XOR D — パリティ関数を使用します。ラウンド4ではI(B,C,D) = C XOR (B OR NOT D) — 非対称コンバイナーを使用します。これら4つの関数により入力のすべてのビットが出力ダイジェストに影響し、入力の小さな変化が結果のハッシュに大きく予測不可能な変化をもたらすアバランチ効果が生まれます。
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
アルゴリズムは5段階で進みます:(1) 1ビットを付加し、メッセージ長が448 mod 512になるまでゼロを追加する;(2) 元のメッセージ長を64ビットのリトルエンディアン整数として付加する;(3) 4つの32ビット状態変数(A、B、C、D)を固定定数で初期化する;(4) 各512ビットブロックを4つの非線形関数(F、G、H、I)を使用した64オペレーション(各ラウンド16オペレーション)で処理する;(5) 結果の状態を累積合計に加算し、最終的な128ビットハッシュをリトルエンディアンバイト順で出力する。
コード例
一般的なプログラミング言語や環境でMD5ハッシュを生成する方法。なお、MD5はブラウザのWeb Crypto APIでは利用できません — ライブラリまたはNode.jsを使用してください。
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3