1.理論
通常の HTTP では、一般形式のパスワードは処理のためにクリア テキストでサーバーに送信されます。これは間違いなく悪者にチャンスを与えます。ここではパスワードを安全に送信する方法について説明します。
パスワードそのものを送信するよりも、暗号化された形式で送信する方が良いでしょう。 MD5 は良い選択です。まず、異なるリソースで同じ MD5 ダイジェストを生成することはほとんど不可能です。第 2 に、MD5 のエンコード方法は元に戻せません。これらの機能を使用すると、パスワードが悪意のある者に知られることを心配することなく、MD5 ダイジェストをインターネット上で公的に送信できるようになります。次に、サーバー側でパスワードが同様に暗号化され、最後に 2 つの文字列が比較されます。
ただし、パスワードを md5 してログインのためにインターネット経由で直接送信することはできません。なぜなら、悪者は私たちのパスワードを知りませんが、私たちの Web サイトへのアクセスを許可できるこの特別な文字列を間違いなく知っているからです。
これは、公開鍵と秘密鍵が解決しなければならない問題です。まず、サーバーがランダムな文字列を提供し、次にクライアントがそのランダムな文字列とパスワードを追加して暗号化します。
ログインするたびに、サーバーはパスワードが変更されないように異なるランダムな文字列を生成しますが、上記の方法で暗号化された MD5 ダイジェストはまったく異なります。このようにして、たとえ悪者がこれらの MD5 ダイジェストを入手したとしても、パスワードを分析することはできません。
この方法では、サーバーによって提供されるランダムな文字列は「公開キー」と呼ばれ、有効期限が短く誰でも使用できます。パスワードは「秘密キー」と呼ばれ、有効期限が長く、決して使用されません。知られている。 。
2.成し遂げる
クライアントサイド Javascript は既製の md5 アルゴリズムを提供しませんが、Google で「md5 javascript」を検索すると、JavaScript で実装された md5 の例を多数入手できます。
PHP ではこれ以上説明する必要はありません。md5() 関数を使用するだけです。セッションを使用してランダムな文字列を保存できます (PHP は非常に強力です~~)
3.知らせ
JS では、中国語の文字は UTF-8 形式であるため、パスワードが中国語で、サーバーに保存されているパスワードのエンコード方式が GB2312 である場合、2 つのパスワードの暗号化された文字列は完全に異なります。