1. ホーム
  2. md5

[解決済み] MD5を逆引きして元の文字列を取得する方法とは?重複

2022-03-14 16:26:27

質問

<ブロッククオート

重複の可能性があります。

md5ハッシュを復号化することは可能ですか?

JavaでMD5から文字列を取得することは可能ですか?

まず文字列がMD5チェックサムに変換されますが、このMD5チェックサムを元のテキストに戻すことは可能ですか?

MessageDigestを使うことを想定していますが、他のjavaライブラリでもいいので、何かあれば教えてください。

また、このアプリがどのようにそれを可能にしているのか、それが不可能である場合について指摘したいと思います。 https://play.google.com/store/apps/details?id=com.fab.md5&hl=ja

さらに別のアプリでテキストをMD5チェックサムに変換し、このチェックサムを使ってアプリがテキストに変換し直せるかどうか確認したところ、変換できたのです。

解決方法は?

いいえ、それは不可能です。

  • を与える文字列が複数存在する可能性があります。 MD5
  • 逆引きがしにくいように設計されています。

MD5とそのハッシュ関数ファミリーの目標は、次のとおりです。

  • 長い文字列から短い文字列を取り出す。
  • どこから来たかを推測しにくくするため
  • 衝突、つまり同じハッシュを持つ他の単語を見つけにくくする(これは2番目の要件と非常に似ている)。

どんな文字列でも、たとえ非常に長い文字列でも、MD5を取得することができると考えてください。そして、MD5はたった16バイト(保存や配布を容易にするためにヘキサで書くと32バイト)しかありません。もしこれを逆手に取れば、魔法のようなコンパクト化スキームが完成します。

とはいえ、世の中にはそれほど短い文字列(パスワード...)が使われているわけではないので、辞書からテストしたり(これを"ブルートフォースアタック"といいます)、MD5をググってみたりするのも手です。その単語が一般的で、塩漬けされていなければ、成功する確率はそれなりに高いのですが...。