ホームページ  >  記事  >  バックエンド開発  >  ウェブサイトの登録とログインのパスワードを暗号化するにはどうすればよいですか?

ウェブサイトの登録とログインのパスワードを暗号化するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:54:281467ブラウズ

これに関する記事をインターネットでたくさん読みましたが、どの記事も、ログイン時にクライアントのパスワードを 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))。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。