パスワードを「ハッシュ解除」することはできません (少なくとも一般的で効率的で信頼できる方法ではありません。攻撃者が行うことであるいくつかのパスワードを推測することはできます。攻撃者がある程度成功する可能性があるため、MD5 から正確に移行したいと考えています)。 )。そのため、移行は時間の経過とともに広がります。一部のパスワードは MD5 でハッシュされ、その他は SHA-256 でハッシュされます。パスワードを検証する場合:
- そのパスワードの SHA-256 がわかっている場合は、SHA-256 が使用されます。このパスワードは既に移行されています。
- それ以外の場合は、MD5 を使用してパスワードをチェックします。一致する場合、パスワードは有効です。パスワードはその時点でアプリによって認識されているため、アプリはパスワードも SHA-256 でハッシュし、MD5 ハッシュをデータベース内の SHA-256 ハッシュに置き換えます。
したがって、パスワードは動的に移行されます。MD5 を完全に取り除くには、長時間待つか、長期間アクセスされていないアカウントを破棄する必要があります。MD5 ハッシュと SHA-256 ハッシュを区別できる必要があります。サイズが異なるため簡単です (MD5 では 16 バイト、SHA-256 では 32 バイト)。フラグやその他の同様のギミックを追加することもできます。
ハッシュ関数の生の単一アプリケーションでパスワードをハッシュすることは、セキュリティ上、かなりお粗末な方法であり、MD5 を SHA-256 に置き換えても実際には改善されないことに注意してください。データベースへの読み取りアクセス権を取得した攻撃者がパスワード自体を学習しないように、パスワードをハッシュします。攻撃者がパスワードを推測するのを本当に防ぐには、「ソルト」(ハッシュ化されたパスワードと一緒に保存されるパスワードごとのランダム データ) と、適切に遅いハッシュ関数 (つまり、数千、場合によっては数百万回のネストされたハッシュ関数呼び出し) も必要です。詳細については、この回答を参照してください。簡単な答え: 移行を想定しているので、賢明なことを行い、SHA-256 ではなくbcryptに移行します (参照その答えはsecurity.stackexchangeで)。