MD5ジェネレーター

MD5は、テキスト、ファイル、ストリームなどあらゆる入力から128ビット(16進数32文字)のダイジェストを生成します。暗号用途としては2004年に破られていますが、パッケージのダウンロード検証、重複排除のためのフィンガープリント、一部でのgit blob名の生成など、手軽な整合性チェックの標準として今なお使われています。テキストを貼り付けるかファイルをドロップするだけで、何もアップロードせずにローカルで16進数ダイジェストを返します。

MD5ハッシュを生成する方法

  1. 1

    入力を選ぶ

    任意の文字列を入れるテキストボックス、または約2GBまでの任意サイズに対応したファイル選択。

  2. 2

    ツールがローカルでMD5を計算

    ファイルはチャンク単位でストリーミングされるため、大きなファイルでもメモリを圧迫しません。

  3. 3

    16進数ダイジェストを読み取る

    16進数32文字、MD5の標準的な表現形式です。

  4. 4

    コピーまたは照合

    期待されるハッシュ(パッケージ作者が公開したMD5など)と照合するか、記録用にコピーします。

MD5とは何か:そして何ではないか

  • 決定論的。 同じ入力からは常に同じ128ビットの出力が得られます。
  • 固定長。 入力サイズが1バイトでも1ギガバイトでも、出力は16進数32文字です。
  • 一方向性。 MD5ダイジェストから元の入力を復元することはできません(レインボーテーブルが存在するごく小さな入力を除く)。
  • 暗号学的ハッシュとしては破綻している。 衝突はごく簡単に計算できます。次の用途にMD5を使ってはいけません:
    • パスワードの保存(bcrypt、scrypt、Argon2を使用)。
    • デジタル署名(SHA-256またはSHA-3を使用)。
    • TLS証明書の署名(最新のブラウザーでは拒否されます)。
    • 攻撃者に悪用され得る、セキュリティ上重要な整合性の主張。

MD5が今でも問題ない場面

  • 非敵対的な整合性チェック。 ファイルが転送中に壊れていないことの確認。
  • 重複排除。 ストレージ内の同一データのフィンガープリント化。
  • 更新頻度の低い静的アセットでのETag生成
  • キャッシュキーやコンテンツアドレス指定のハッシュ化。

実例

入力テキスト MD5ダイジェスト
(空文字列) d41d8cd98f00b204e9800998ecf8427e
a 0cc175b9c0f1b6a831c399e269772661
abc 900150983cd24fb0d6963f7d28e17f72
The quick brown fox jumps over the lazy dog 9e107d9d372bb6826bd81d3542a419d6
The quick brown fox jumps over the lazy dog.(末尾のピリオド) e4d909c290d0fb1ca068ffaddf22cbd0

たった1文字(末尾のピリオド)でダイジェストが完全に変わる点に注目してください、これが「雪崩効果」です。

MD5とSHAファミリーの比較

関数 出力サイズ 衝突により破られたか 現在の主な用途
MD5 128ビット はい(2004年) 整合性、重複排除、ETag
SHA-1 160ビット はい(2017年) レガシー用途。新規開発では避ける
SHA-256 256ビット いいえ TLS、コミット、一般的な暗号処理
SHA-3 224〜512ビット いいえ SHA-2の現代的な代替
BLAKE3 256ビット いいえ 高速なSHA-2の代替

よくある質問

いいえ。MD5は最新のGPUで容易に総当たり攻撃でき、2004年にすでに破られています。パスワード用のハッシュ関数であるArgon2、scrypt、bcryptを使用してください。

一般的な整合性(ダウンロードが完了したか)なら「はい」。敵対的な整合性(何者かが悪意あるバージョンにファイルを差し替えていないか)なら「いいえ」、その場合はSHA-256を使ってください。

いいえ。ハッシュ化はWebCryptoと型付き配列を使ってブラウザー内で実行されます。ファイルがデバイスの外に出ることは一切なく、プライベートなデータやNDA対象のデータをハッシュ化する際に重要です。

最新のブラウザーは約2GBのストリーミング入力を余裕をもって処理できます。非常に大きなファイル(数十GB)は、md5sumopenssl dgst -md5のようなCLIツールでハッシュ化するほうが適しています。

仕様では大文字・小文字を規定していません。ほとんどのUnix系ツールは小文字を出力し、一部のWindowsツールは大文字を出力します。比較する際は、両側で大文字・小文字をそろえてください。

関連ツール

このツールは他の言語でも利用できます