MD5 ハッシュ生成ツール
オンラインMD5暗号化、16ビットと32ビット出力、大文字小文字変換に対応
書式設定
MD5暗号化とは?
MD5(メッセージダイジェストアルゴリズム5)は、1991年にアメリカの暗号学者ロナルド・リベストによって設計された広く使用されている暗号化ハッシュ関数です。MD5は、任意の長さのデータを固定128ビット(16バイト)のハッシュ値にマッピングでき、通常は32桁の16進数で表されます。 MD5は、データの整合性検証、パスワード保存、デジタル署名などに広く使用されていました。しかし、2004年に中国の暗号学者王小雲氏とそのチームがMD5に衝突の脆弱性を発見し、攻撃者が同じMD5値を持つ異なるデータを構築できるようになりました。そのため、MD5はセキュリティに敏感なシナリオにはもう適していません。 MD5出力形式には2つのタイプがあります:標準の32ビット(完全なハッシュ値)と切り捨てられた16ビット(32ビット値の中間16文字を取得)。このツールは、大文字または小文字表示オプション付きで両方の出力形式をサポートしています。
使い方
使い方
- 暗号化するテキストを入力欄に入力します
- 出力形式(大文字32bit/小文字32bit/大文字16bit/小文字16bit)を選択します
- MD5値が自動的に計算されて表示されます
- 「コピー」ボタンをクリックして結果をコピーします
出力形式の説明
- チェックサム・キャッシュキー・レガシーAPI項目で完全なMD5ダイジェストが必要な場合は、32文字の出力を使用してください。
- 16文字の出力は、レガシーシステムが完全なダイジェストの中央16文字を明示的に要求する場合にのみ使用してください。
大文字・小文字の説明
- 大文字と小文字のMD5値は同じ16進バイトを表し、表示形式のみが異なります。
- MD5値を比較する際は、対象システムの大文字・小文字の指定に正確に合わせ、誤判定を防いでください。
利用シーン
仕組み
MD5(Message-Digest Algorithm 5)は1991年にMITのロナルド・リベストによって設計され、RFC 1321として公開されました。壊れたMD4の後継として登場し、1990年代から2000年代にかけて主力のハッシュ関数として活用されました。ファイル整合性チェック、パスワード保存(ソルトなしの不適切な方法)、デジタル署名、マルウェアのフィンガープリント、そして`md5sum`、MySQLの`MD5()`、Gitの旧オブジェクトストア、`openssl dgst -md5`など多様なツールのデフォルトダイジェストとして使用されてきました。出力は128ビット(16バイト)で、32文字の小文字16進数として表示されます。設計はMerkle-Damgard構造に従います。メッセージを512ビットの倍数にパディングし、64ビットリトルエンディアンの長さを付加し、512ビットごとのブロックに対して圧縮関数を繰り返します。128ビットの状態は4つの32ビットレジスタA、B、C、Dに展開され、固定定数(0x67452301、0xefcdab89、0x98badcfe、0x10325476)で初期化されます。これらは「袖の下なし」の値であり、2、3、5、10の平方根をリトルエンディアンで表現したものです。 各512ビットブロックは16個の32ビットワードM[0..15]に分割され、4ラウンド×16ステップ(合計64ステップ)で処理されます。ラウンド関数はF = (X AND Y) OR (NOT X AND Z)、G = (X AND Z) OR (Y AND NOT Z)、H = X XOR Y XOR Z、I = Y XOR (X OR NOT Z)です。各ステップでは1つのラウンド関数、メッセージワード、ラウンド定数T[i] = floor(2^32 * |sin(i+1)|)、ステップ固有の左ローテーションを組み合わせ、その結果を状態に加算します。4ラウンドの設計意図は次の通りです。ラウンド1は高速で非線形、ラウンド2は並列化可能、ラウンド3はより積極的に混合、ラウンド4は強力な拡散で仕上げます。最終状態がメッセージ全体のMD5となり、これがMD5を(量子コンピュータ以前の意味での)一方向関数としています。 崩壊:衝突耐性は破られており、暗号学的用途においてこれが唯一重要な点です。王氏らは2004年に完全な衝突攻撃を公開しました(CFRG攻撃により、PC上で数時間で衝突探索が可能になりました)。2008年には研究者がMD5衝突を用いて有効なCA証明書を偽造しました(Stevens氏らによる「選択プレフィックス衝突」攻撃)。2012年にはFlameマルウェアが未公開のMD5衝突を悪用してMicrosoftのコード署名証明書を偽造しました。2004年の論文により衝突探索空間は2^64から約2^24に縮小され、数時間の計算で同一MD5を持つ2つのメッセージを生成できるようになりました。Flameの後、MicrosoftはAuthenticodeでMD5を明示的に禁止し、ブラウザは2014〜2017年にMD5署名のTLS証明書を失効させ、IETFはTLS、SSH、IPsecでのMD5を長く非推奨としています。 現代のx86-64ノートPCでの性能:MD5は1コアあたり400〜700 MB/s(大規模入力ではメモリ帯域幅が律速)、SHA-256は200〜300 MB/s、SHA-512は64ビットワード演算により64ビットCPUでより高速です。パスワードハッシュングには、スループットに関係なくMD5は不適切です。bcrypt/scrypt/Argon2idはGPUアクセラレーションを回避するために意図的に調整可能になっています。RTX 4090単体でHashcatがMD5を約60 GH/s(ギガハッシュ/秒)で処理し、同じGPUでのSHA-256の7〜8倍です。この差こそがMD5の危険性の理由です。GPUは事前計算テーブルを数時間で総当たりでき、年単位ではありません。Web Cryptoの`crypto.subtle.digest('MD5', bytes)`はChrome、Edge、Firefox 102+でディスク速度に近い速度で実行され、旧ブラウザでは純JS実装(SparkMD5またはページ独自実装)にフォールバックし50〜150 MB/sで動作します。RFC 1321のテストベクトル:空文字列はd41d8cd98f00b204e9800998ecf8427e、'a'は0cc175b9c0f1b6a831c399e269772661、'abc'は900150983cd24fb0d6963f7d28e17f72です。出力がこれらと一致しない場合、バグはほぼ常にエンコーディングの問題(JS文字列をUTF-8バイトではなくJS MD5実装に直接渡している)であり、アルゴリズム自体の問題ではありません。
- Merkle-Damgard構造によりMD5は長さ拡張攻撃に脆弱です。H(secret || msg)が分かれば、攻撃者はsecretを知らずにH(secret || msg || padding || extra)を計算できます。このためMD5(secret || message)は安全なMACではありません。代わりにHMAC-MD5(RFC 2104)またはHMAC-SHA256を使用してください。これらは異なる構造(2鍵のネストされたハッシュ)を用い、この攻撃に耐性があります。
- テストベクトル(RFC 1321):空文字列はd41d8cd98f00b204e9800998ecf8427e、'a'は0cc175b9c0f1b6a831c399e269772661、'abc'は900150983cd24fb0d6963f7d28e17f72です。実装がこれらを生成しない場合、バグはほぼ常にエンコーディングの問題(TextEncoderでUTF-8バイトに変換せずJavaScript文字列をJS MD5実装に渡している)であり、アルゴリズム自体の問題ではありません。
- ハッシュレート:現代のx86-64CPUの1コアはMD5で約400〜700 MB/sを処理し、大規模入力ではメモリ帯域幅が律速です。SHA-256は約30%遅く200〜300 MB/s、SHA-512は64ビットワード演算により64ビットCPUでより高速です。パスワードハッシュングに適切な選択はbcrypt(コストファクター12)/ scrypt / Argon2idで、意図的に遅くGPUアクセラレーションを回避するよう調整可能です。
- 4つのラウンド関数F、G、H、Iは意図的に文として読めるように命名されています('FiGiHI' / 'figi hi')。これはリベストの署名です。各関数はビット演算のみで異なる混合構造を使用し、暗号解析において線形またはアフィン系に崩壊しないようになっています。DES/AESのS-boxの概念はMD5には存在しません。セキュリティはメッセージワード拡張とローテーション定数から生まれ、置換表からは生まれません。
- RTX 4090単体のHashcatベンチマーク:MD5(純ハッシュ)で約60 GH/s、ソルト付きMD5で30 GH/s。同じGPUでのSHA-256は8 GH/sです。7〜8倍の差が攻撃者がMD5を好む理由です。GPUは事前計算テーブルを数時間で総当たりできます。オフライン攻撃に耐える必要があるものにはSHA-256、bcrypt、またはArgon2idを使用してください。
- 「ダブルMD5」(MD5(MD5(x)))は古いPHPやMySQLコードで見られることがあり、しばしばソルト付きです。衝突攻撃には効果がありません(MD5の衝突はO(1)の追加作業でMD5(MD5())の衝突になります)で、原像探索をわずかに遅らせるだけ(2倍)です。現代のパスワードハッシュング(RFC 9106のArgon2id、RFC 7914のscrypt、コスト>=12のbcrypt)がパスワード保存の唯一の正解です。現代のパスワードカラムにMD5がある場合、それはバグです。
- MD5からの移行:現在MD5を使用しているシステムを運用している場合、適切な移行方法はデュアルライト(読み取り時にMD5とSHA-256の両方を計算し、新しいコードパスではSHA-256を優先)による非推奨期間を設け、何も依存しなくなってからMD5を廃止することです。MD5を必須とするレガシープロトコル(NTLM、RADIUSチャレンジレスポンス、一部のKerberosモード)ではMD5はすぐにはなくなりません。Microsoftは2010年にNTLMをAESを使用するようパッチしましたが、互換性のため旧バージョンがデフォルトで有効のままです。レガシーWindowsシステムがある場合はNTLMv1を完全に無効化すべきです。
- ページの実装:Web Cryptoが利用可能な場合(Chrome、Edge、Firefox 102+)は`crypto.subtle.digest('MD5', utf8Bytes)`が使用され、ネイティブコードでディスク速度に近い速度で実行されます。利用不可の場合は純JS実装(SparkMD5 0.7またはページ独自実装)が使用され、50〜150 MB/sで動作します。両方とも同一の出力を生成するため、テストベクトルは両方のバックエンドでパスします。エンコーディングステップは`new TextEncoder().encode(str)`で常にUTF-8バイトを返します。JSのみのMD5実装にJavaScript文字列を直接渡すと、非ASCII入力で誤ったハッシュが得られます。
使用例
空文字列と短いテキスト
空文字列 -> d41d8cd98f00b204e9800998ecf8427e
hello -> 5d41402abc4b2a76b9719d911017c592
RFC: RFC 1321 セクション A.1 にこれらのテストベクトルが定義されている大文字・小文字の区別
hello world -> 5eb63bbbe01eeed093cb22bb8f5acdc3
Hello -> 8b1a9953c4611296a827abf8c47804d7
HELLO -> eb61eead90e3b899c6bcbe27ac581660
注意: 1 文字変えただけでハッシュ全体が大きく変化する(雪崩効果)数字と記号
123456 -> e10adc3949ba59abbe56e057f20f883e
Hello, World! -> 65a8e27d8879283831b664bd8b7f0ad4
file.txt -> 3d8e577bddb17db339eae0b3d9bcf180
注意: 記号や空白文字を変えるだけでも、まったく異なるダイジェストが生成されるMD5 がセキュリティ用途に推奨されない理由
衝突攻撃: 2004 年に、同じ MD5 ハッシュを持つ 2 つの異なるメッセージを
作成する手法が発見された。これによりデジタル署名や証明書の検証が
破られる。
セキュリティ用途には SHA-256 または SHA-3 を使用すること:
MD5: 128 bit、衝突耐性が破られている(実用的な攻撃が存在)
SHA-256: 256 bit、実用的な衝突は未発見
SHA-512: 512 bit、さらに強固な安全マージン
NIST: NIST は 2005 年以降、暗号用途での MD5 を非推奨としている
用途: ファイルの整合性チェック、重複排除、キャッシュキーには引き続き安全に使えるよくある質問
MD5とは何ですか?
MD5(Message Digest 5、RFC 1321)は、Ron Rivestが1991年に発表した128ビットのハッシュ関数です。入力長に関わらず常に32文字の16進数を返し、入力が1ビットでも変わると出力が完全に変わります。最近のCPUでは数百MB/sと高速です。
MD5は安全ですか?
セキュリティ用途には安全ではありません。MD5に対する衝突攻撃は2004年以降、選択プレフィックス衝突は2007年以降実用的になっています。デジタル署名、証明書ハッシュ、パスワード保存、攻撃者がいずれかの入力を選択できる改ざん検出には絶対に使用しないでください。
MD5は今でも何に使えますか?
偶発的な破損の検出です。ダウンロードのチェックサム、信頼できるファイルの簡易な重複排除、ETag風のクイックフィンガープリントなどです。多くのベンダーは下位互換性のためにMD5を引き続き公開しており、しばしばSHA-256と併記されています。
計算はローカルで行われますか?
はい。貼り付けたテキストのMD5はブラウザ内で計算されます。何もアップロードされず、記録もされません。ハッシュ実行中にネットワークタブを確認することで確かめられます。
同じ文字列でも他のツールで異なるMD5になるのはなぜですか?
ほぼ必ず、目に見えない文字の違いが原因です。UTF-8 BOM、末尾の改行、LFではなくCRLF、あるいは一方のツールがUTF-8でエンコードしているのに対し、他方がUTF-16でエンコードしている、などです。MD5アルゴリズム自体はあらゆる実装で完全に決定的に動作します。
大文字と小文字のMD5は同じですか?
はい。出力の128ビットは同一であり、大文字小文字は単なる表示上の慣例です。検証では大文字小文字を区別せずに比較すべきです。
MD5とMD5(salt + password)はどう違いますか?
パスワードのプレーンなMD5は、レインボーテーブルで簡単に解読できます。ソルトを加えると事前計算済みテーブルは防げますが、MD5はパスワードハッシュには依然として高速すぎます。パスワードにはbcrypt/scrypt/Argon2を使用してください。MD5(ソルトの有無にかかわらず)はその用途には不適切なツールです。