使い方
- テキストを入力または貼り付けます。「入力形式」を「16進数」に切り替えてバイト列を入力することも、「ファイルを開く」でファイルのバイト列をそのままハッシュ化することもできます。
- 元のハッシュ値が別の文字コードのテキストから作られたものでない限り、「文字コード」は UTF-8 のままにしておきます。
- 「出力形式」で「16進数(小文字)」「16進数(大文字)」「Base64」のいずれかを選びます。
- ダウンロードしたファイルを確認するには、公開されている MD5 を「比較対象」欄に貼り付け、「一致」と表示されるかどうかを確認します。
MD5 とは
MD5(Message-Digest Algorithm 5)は Ronald Rivest が設計し、1992 年に RFC 1321 として公開されたハッシュ関数です。入力を 512 ビットのブロック単位で読み込み、128 ビットのダイジェストを出力します。通常は16進数で 32 文字、または Base64 で 24 文字として表記されます。同じ入力からは常に同じダイジェストが得られ、入力を 1 ビット変えるだけで出力のビットの約半分が変化します。
ハッシュ化は一方向の処理です。鍵はなく、MD5 のハッシュ値を「復号」して入力に戻す方法もありません。MD5 を逆変換できると称するサイトは、単語や流出したパスワードをハッシュ化した巨大な表からハッシュ値を検索しているだけです。ソルトなしの短いパスワードの MD5 が数秒で見つかることが多いのはこのためです。
MD5 は今でも安全か
攻撃者を想定する場面では安全ではありません。2004 年に王小雲(Xiaoyun Wang)らが、同じ MD5 になる 2 つの異なる入力、つまり実用的な衝突を発表しました。続いて選択プレフィックス衝突も実現し、2008 年には研究者がこれを使って不正な CA 証明書を作成し、2012 年にはマルウェア Flame が同じ手法で証明書を偽造して、自身のコードを Microsoft が署名したものに見せかけました。現在では一般的なノートパソコンでも MD5 の衝突を数秒で見つけられます。RFC 6151 は、デジタル署名のように衝突耐性が求められる用途では、MD5 はもはや許容できないと明記しています。
一方、ダウンロードの途中切れやディスク上のビット反転といった偶発的な破損を検出するチェックサムとしては、MD5 は今でも十分に使えます。キャッシュキーや、信頼できるデータの重複排除にも問題ありません。ファイルやそのチェックサムが攻撃者から渡される可能性がある場合は、代わりに SHA-256 を使用してください。
16進数、Base64、ハッシュ値が一致しない場合
MD5 は通常16進数で表示され、md5sum もこの形式で出力します。一方、16 バイトの生データを Base64 で送るプロトコルもあります。たとえば、Amazon S3 などのクラウドストレージ API で使われる HTTP の Content-MD5 ヘッダーです。この場合は「出力形式」で「Base64」を選ぶか、既存の値を 16進数 → Base64 で変換してください。
ほかのツールと MD5 が異なる場合は、入力のバイト列が異なっています。よくある原因は、末尾の改行、Windows 形式の改行、または別の文字コードです。たとえば「café」は UTF-8 では 5 バイトですが ISO-8859-1 では 4 バイトなので、2 つのハッシュ値にはまったく共通点がありません。
$ echo "hello" | md5sum # "hello\n" をハッシュ化
b1946ac92492d2347c6235b4d2611184 -
$ printf 'hello' | md5sum # "hello" をハッシュ化
5d41402abc4b2a76b9719d911017c592 -
コマンドラインとコードで MD5 を計算する
md5sum file.iso # Linux
md5 file.iso # macOS
certutil -hashfile file.iso MD5 # Windows
Get-FileHash file.iso -Algorithm MD5 # PowerShell
# Python
import hashlib
hashlib.md5('hello'.encode('utf-8')).hexdigest()
// Node.js
require('crypto').createHash('md5').update('hello', 'utf8').digest('hex')
ブラウザに組み込まれた Web Crypto API は MD5 に対応していないため、このページではお使いのデバイス上で JavaScript を使って MD5 を計算します。データがアップロードされることはありません。結果の下にある「すべてのアルゴリズム」の表には、同じ入力に対する SHA-1、SHA-256、SHA-384、SHA-512、CRC-32、CRC-32C も表示されます。
エンコード例
| 入力 (UTF-8) | MD5 |
|---|---|
Hello, World! | 65a8e27d8879283831b664bd8b7f0ad4 |
Base64.is | 2e3c0e8b828164a8db7f62146ca87e14 |
你好 | 7eca689f0d3389d9dea66ae112e5cfd7 |
よくある質問
MD5 のハッシュ値は復号できますか?
ダウンロードの検証に MD5 は十分ですか?
偶発的な破損は確実に検出できます。ただし、衝突を作るコストが低いため、あらかじめファイルを用意しておけば、同じ MD5 を持つ別の内容のファイルを作れてしまいます。セキュリティ上重要なダウンロードでは、信頼できる入手元の SHA-256 ハッシュ値か署名で確認してください。
MD5 のハッシュ値の長さはどれくらいですか?
== で終わる 24 文字になります。32 文字の16進数文字列は MD4 や NTLM のハッシュ値である可能性もあります。ハッシュ識別ツールで候補を一覧表示できます。大きなファイルの MD5 も計算できますか?
md5sum や certutil で計算することをおすすめします。