これに関する記事をインターネットでたくさん読みましたが、どの記事も、ログイン時にクライアントのパスワードを md5 で暗号化してサーバーに送信する必要があり、サーバーはそれをデータベース内のソルトと比較し、暗号化されたパスワード
次の場合どうすればよいかよくわかりません。これを行うと
ユーザー A のユーザー名が abcd で、パスワードが 123456 であるとします。md5 暗号化後、それは次のようになります: e10adc3949ba59abbe56e057f20f883e
ハッカーの場合、彼はユーザー名: abcd、パスワード: e10adc3949ba59abbe56e057f20f883e を誤って取得しました
現時点では abcd を知る必要はありません。パスワードは 123456 で、e10adc3949ba59abbe56e057f20f883e がどのように生成されるかを理解する必要はありません。ユーザー名: a を入力するだけです。 BCD、次にパスワード: e10adc3949ba59abbe56e057f20f883e を入力してサービスを呼び出し、ログインします。
この状況を回避するにはどうすればよいですか?
ハッカーはどうやってユーザー名 abcd と暗号文を知るのでしょうか?
クライアントを暗号化する必要はありません
通常のユーザー名とパスワードを使用してログインするだけです。
次に、サーバー側で、パスワードに対して md5(md5(password)+salt) 操作を実行して、暗号化されたパスワードを生成します。塩はデータベースから取得されます。
次に、それをデータベース内の暗号化されたパスワードと比較します。
それらが同じであればログインは成功し、そうでなければログインは失敗します。
このアプローチの利点は、たとえデータベースがハッカーによって入力されたとしても、ユーザーの平文パスワードを知ることができないことです。
これはサーバーのパスワードを比較する方法です
if ($row['pwd'] == md5($_POST['pwd'])){
//
}
たとえMD5以降のパスワードを他の人が知っていたとしても、しかし、サーバーに到達するときに、再度暗号化するか、複数回暗号化してから比較する必要があります。
ハッカーがデータベースをハッキングしてメンバーのユーザー名と暗号化されたパスワードを取得したとしても、MD5 暗号化は基本的に元に戻すことができないため、ハッカーは既知のサービスを呼び出してログイン操作を完了することはできません。
ただし、md5 暗号化の層はあまり安全ではありません。md5 復号化を提供する Web サイトは数多くあります。 md5 で複数回暗号化するか、独自のカスタム文字列を追加してから md5 で暗号化することをお勧めします (md5(user_passwd.your_dependent_string))。