MD5 ハッシュ値生成ツール

テキスト、16進数のバイト列、ファイルから 128 ビットの MD5 ダイジェストを計算します。ハッシュ値は入力に合わせてリアルタイムに更新され、「比較対象」欄を使えば、想定していたチェックサムと一致するかどうかを確認できます。

すべてのアルゴリズム

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. テキストを入力または貼り付けます。「入力形式」を「16進数」に切り替えてバイト列を入力することも、「ファイルを開く」でファイルのバイト列をそのままハッシュ化することもできます。
  2. 元のハッシュ値が別の文字コードのテキストから作られたものでない限り、「文字コード」は UTF-8 のままにしておきます。
  3. 「出力形式」で「16進数(小文字)」「16進数(大文字)」「Base64」のいずれかを選びます。
  4. ダウンロードしたファイルを確認するには、公開されている 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.is2e3c0e8b828164a8db7f62146ca87e14
你好7eca689f0d3389d9dea66ae112e5cfd7

よくある質問

MD5 のハッシュ値は復号できますか?
いいえ。MD5 は暗号化ではなく一方向のハッシュ関数なので、復号するものがありません。「MD5 復号ツール」が返せるのは、すでに自分の表に登録されている入力だけです。あとで元のデータを取り出す必要がある場合は、暗号化を使用してください。秘密にする必要がなければ、完全に元に戻せる Base64 でエンコードする方法もあります。
ダウンロードの検証に MD5 は十分ですか?

偶発的な破損は確実に検出できます。ただし、衝突を作るコストが低いため、あらかじめファイルを用意しておけば、同じ MD5 を持つ別の内容のファイルを作れてしまいます。セキュリティ上重要なダウンロードでは、信頼できる入手元の SHA-256 ハッシュ値か署名で確認してください。

MD5 のハッシュ値の長さはどれくらいですか?
128 ビット、つまり 16 バイトです。16進数では 32 文字、Base64 では == で終わる 24 文字になります。32 文字の16進数文字列は MD4 や NTLM のハッシュ値である可能性もあります。ハッシュ識別ツールで候補を一覧表示できます。
大きなファイルの MD5 も計算できますか?
はい。「ファイルを開く」でファイルを読み込むと、そのバイト列はアップロードされることなくブラウザ内でハッシュ化されます。上限はブラウザが使用できるメモリ量なので、数 GB 規模のファイルは md5sum や certutil で計算することをおすすめします。
パスワードを MD5 で保存してもよいですか?
いいえ。MD5 は高速に動作するよう設計されているため、GPU 1 枚で毎秒数十億回の推測を試せます。パスワードの保存には、ソルトを付加し、意図的に低速になるよう設計された Argon2id、scrypt、bcrypt、PBKDF2 を使用してください。そもそも強力なパスワードを用意するには、パスワード生成ツールが便利です。