MD5 ハッシュ値
無料オンラインMD5ハッシュ計算ツール。テキスト、ファイル、一括行ごと、HMAC-MD5の4つのモードに対応。UTF-8/Latin1エンコーディング選択可能、大文字出力と8桁ごとのスペース区切りに対応。⚠️ MD5は安全ではありません。パスワード保存には使用しないでください。
無料オンラインMD5ハッシュ計算ツール。テキスト、ファイル、一括行ごと、HMAC-MD5の4つのモードに対応。UTF-8/Latin1エンコーディング選択可能、大文字出力と8桁ごとのスペース区切りに対応。⚠️ MD5は安全ではありません。パスワード保存には使用しないでください。
MD5はファイル整合性検証(ダウンロードパッケージの検証など)、高速ダイジェスト生成、レガシーシステム互換、キャッシュキー、データ重複除去などの非セキュリティシーンでよく使われます。MD5は128ビット(32文字の16進数)を出力し、計算速度が速いため、安全性要件の低い検証シーンに適しています。
MD5は128ビット(32文字Hex)を出力し、SHA256は256ビット(64文字Hex)を出力します。MD5はより高速ですが破解されています;SHA256は実用的な衝突攻撃が発見されておらず、現代のセキュリティシーンで第一選択肢となっています。
SHA256ツールMD5は計算速度が非常に速く、現代のGPUは毎秒数十億回計算でき、ソルトがないとレインボーテーブルで簡単に破解されます。パスワード保存にはbcrypt、scrypt、Argon2などの低速ハッシュアルゴリズムを使用すべきです。
パスワード生成器セキュリティシーン(デジタル署名、パスワード保存、TLS証明書)では絶対に使用できません。ただし非セキュリティシーン(破損防止のファイル検証、データ重複除去、キャッシュキー)ではMD5はまだ使用可能です。攻撃者が衝突を作成する動機がないからです。
MD5は一方向ハッシュであり、理論上復号できません。しかしレインボーテーブルとブルートフォースにより、一般的な弱いパスワードは秒単位で見つかります。これがMD5でパスワードを保存してはいけない理由です。
いいえ。ツールは分割インクリメンタル読み込みを採用しており、ファイル全体をメモリに読み込まないため、数GBのファイルでもスムーズに計算でき、インターフェースは常に応答します。
HMAC-MD5はMD5ベースのメッセージ認証コードアルゴリズムで、鍵を入力として必要とし、メッセージの整合性と真正性を検証するために使用されます。MD5自体に衝突問題があっても、鍵が未知の場合HMAC-MD5は安全です(ただしHMAC-SHA256への移行が推奨されます)。
HMAC生成器MD5(Message-Digest Algorithm 5)はRonald Rivestによって1991年に設計された128ビットハッシュ関数です(RFC 1321)。任意の長さの入力を固定32文字の16進数フィンガープリントに変換します。MD5はかつてデジタル署名、証明書検証、パスワード保存に広く使用されていましたが、2004年に王小雲チームが初めて衝突攻撃を実演し、2008年にFlameマルウェアがMD5衝突を利用してCA証明書を偽造し、2024年には原像攻撃が実演される新しい研究が発表されました。
**MD5のセキュリティ状態**:NISTは2011年にSP 800-131Aでデジタル署名とセキュリティシーンでのMD5使用を正式に廃止しました。ただしMD5は非セキュリティシーンではまだ有用です:ファイル整合性検証(ダウンロードの破損確認)、データ重複除去、キャッシュキー、ログ分析。判断基準:攻撃者が衝突を作成する動機と能力があるか?なければ、MD5の速度の速さはむしろ利点です。
**MD5がパスワード保存に使用されるべきでない理由**:MD5は計算が非常に速く、現代のGPUは毎秒数十億回計算でき、レインボーテーブルと組み合わせると一般的なパスワードを秒単位で破解できます。パスワード保存にはbcrypt、scrypt、Argon2などの「低速ハッシュ」アルゴリズムを使用しなければなりません——これらのアルゴリズムには設定可能なワークファクターがあり、ブルートフォースのコストを非常に高くします。
**HMAC-MD5のセキュリティ**:純粋なMD5は破解されていますが、HMAC-MD5(鍵ベースのハッシュメッセージ認証コード)は鍵が未知の場合でも安全です。HMACの構成方法がハッシュ関数の衝突耐性に直接依存しないからです。ただし新しいシステムではHMAC-SHA256への移行が推奨されます。
このツールは純粋なJavaScriptでMD5計算を実装しています(Web Crypto APIはMD5をサポートしていません)。すべての計算はブラウザローカルで完了し、ファイルは分割インクリメンタル読み込みを採用しサーバーにアップロードされません。開発者ツールのネットワークパネルを開くと、外部へのリクエストがゼロであることを確認できます。
| アルゴリズム | 出力ビット数 | Hex長 | 安全性 | 速度 | 推奨用途 |
|---|---|---|---|---|---|
MD5 | 128ビット | 32文字 | ❌ 破解済み(衝突/原像) | 非常に速い | ファイル検証、重複除去、キャッシュキー |
SHA-1 | 160ビット | 40文字 | ❌ 衝突攻撃(2017) | 速い | Git、旧システム互換 |
SHA-256 | 256ビット | 64文字 | ✅ 安全 | 中程度 | デジタル署名、証明書、ブロックチェーン |
SHA-512 | 512ビット | 128文字 | ✅ 安全 | 速い(64ビットCPU) | 高セキュリティシーン、パスワード派生 |
bcrypt | - | 60文字 | ✅ パスワード専用 | 遅い(調整可能) | パスワード保存 |
| 年 | イベント | 影響 |
|---|---|---|
1991 | Ron RivestがMD5を設計(RFC 1321) | MD4に代わり、主流ハッシュアルゴリズムとなる |
1996 | MD5の擬似衝突の欠陥が初めて発見される | 学界でMD5の安全性に疑問が生まれる |
2004 | 王小雲チームがMD5衝突攻撃を実演 | MD5デジタル署名の安全性が完全に崩れる |
2008 | FlameマルウェアがMD5衝突を利用してCA証明書を偽造 | NISTがデジタル署名でのMD5使用を正式に廃止 |
2011 | NIST SP 800-131AがMD5のセキュリティ用途を正式に禁止 | 米国政府システムがMD5を全面的に使用停止 |
2024 | 新しい原像攻撃論文が発表 | MD5最後の防衛線(原像耐性)が突破される |
// Note: Web Crypto API does NOT support MD5 (deprecated)
// Use SHA-256 instead for new projects
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2,'0')).join('');
}
sha256('Hello World').then(console.log);
// MD5 in Node.js using crypto module
const crypto = require('crypto');
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // b10a8db164e0754105b7a99be72e3fe5import hashlib
text = 'Hello World'
md5_hash = hashlib.md5(text.encode('utf-8')).hexdigest()
print(md5_hash) # b10a8db164e0754105b7a99be72e3fe5
# File MD5 (chunked for large files)
def md5_file(filepath, chunk_size=8192):
md5 = hashlib.md5()
with open(filepath, 'rb') as f:
while chunk := f.read(chunk_size):
md5.update(chunk)
return md5.hexdigest()
# HMAC-MD5
import hmac
hmac_md5 = hmac.new(b'secret-key', b'Hello World', hashlib.md5).hexdigest()
print(hmac_md5)import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
public class MD5Example {
public static String md5(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hash) sb.append(String.format("%02x", b));
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(md5("Hello World"));
// b10a8db164e0754105b7a99be72e3fe5
}
}
// Note: Use SHA-256 for new code: MessageDigest.getInstance("SHA-256")