PHP アプリケーションを開発するときに新しい暗号化アルゴリズムを自分で開発したくない場合は、PHP が提供する crypt() 関数を使用して一方向暗号化関数を完成させることもできます。
crypt() について
Windows 以外のプラットフォームの使用経験が少しある読者は、crypt() と呼ばれる関数によく知られているかもしれません。この機能では、一部の平文コードを暗号化できますが、逆にパスワードを元の平文コードに変換することはできません。 crypt() 関数は次のように定義されます。
String crypt (string input_string [, string Salt])
このうち、input_string パラメータは暗号化する必要がある平文文字列で、2 番目のオプションの Salt は暗号化できるビット文字列です。影響 暗号化されたパスワードにより、解読される可能性がさらに排除されます。デフォルトでは、PHP は 2 文字の DES 干渉文字列を使用します。システムが MD5 を使用する場合 (次のセクションを参照)、PHP は 12 文字の干渉文字列を使用します。システムが使用する干渉ストリングの長さは、次のコマンドを実行することで確認できます。
print "私のシステム ソルト サイズは: ". CRYPT_SALT_LENGTH;
crypt() は、サポートされるアルゴリズムと対応するソルト パラメーターの長さを示します。
テーブル crypt() は 4 つの暗号化アルゴリズムをサポートしています
算法 |
Salt长度 |
CRYPT_STD_DES |
2-character (Default) |
CRYPT_EXT_DES |
9-character |
CRYPT_MD5 |
12-character beginning with $ |
CRYPT_BLOWFISH |
16-character beginning with $ |
crypt() 関数は、表面的にはほとんど役に立たないように見えますが、実際には広く使用されています。システムパスワードの整合性。なぜなら、一方向暗号化パスワードは第三者の手に渡っても平文に戻すことができないため、あまり役に立たないからです。
crypt() を使用してユーザー認証を実装します 前編では、crypt() 関数の機能を簡単に紹介しました。次に、それを使用してユーザー認証を実装します。必要なもの 達成される目標は、セクション 19.2.3 で紹介したものと同じです。
1
2 3 $user_name=$_POST["user_name"];
4 require_once("sys_conf.inc") //データベース構成情報を含むシステム構成ファイル
5
6 //データベースに接続します
7 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
8 mysql_select_db($DBNAME) //データベースを選択 my_chat
9
10 //ログインユーザー情報があります
11 $str="select name,password from user where name ='$user_name'";
12 $result=mysql_query($str,$link_id) //クエリを実行
13 @$rows= mysql_num_rows($result); //クエリ結果から取得したレコード数
14 $user_name=$_SESSION["user_name"];
15 $password=$_POST["password" ];
16 $ Salt = substr($password, 0, 2);
17 $password_en=crypt($password,$salt); //crypt() を使用してユーザー パスワードを暗号化します
18
19 //古いユーザーの場合
20 if($rows!=0)
21 {
22 list($name,$pwd)=mysql_fetch_row($result);
23
24 //パスワードが正しく入力されている場合
25 if($pwd==$password_en)
26 {
27 $str="update user set is_online =1 where name ='$user_name' およびパスワード='$password_en'";
28 $result=mysql_query($str, $link_id);//クエリを実行
29 require("main.php"); //チャットページに移動
30 }
31 // パスワード入力エラー
32 else
33 {
34 require("relogin.php");
35 }
36
37 }
38 //新規ユーザーの場合、その情報をデータベースに書き込みます
39 else
40 {
41 $str="ユーザー (名前,パスワード,is_online) に挿入します。values('$user_ name',' $password_en',1)" ;
42 $result=mysql_query($str, $link_id); //クエリを実行
43 require("main.php"); //チャットページに移動
44 }
45 / /データベースを閉じる
46 mysql_close($link_id);
47 ?>
この例は、 で紹介したユーザー情報を保護するための XOR 暗号化アルゴリズムの使用に非常に似ています。前のセクションとその核心部分は第 16 章の 17 行目で、crypt() 関数を使用して暗号化されたパスワードを取得し、データベース内のパスワードと 25 行目の暗号化されたパスワードを比較することでユーザーが正当であるかどうかを確認します。
次に、暗号化されたパスワードがどのようになるかを例で見てみましょう。
たとえば、ユーザー名がrock、パスワードが123456の場合、暗号化されたパスワードは次のようになります:
12tir.zIbWQ3c
上記は、単純なユーザー認証システムを実装しています。重要な機密情報を保護するために crypt() を使用する場合、デフォルト状態での crypt() の使用は最も安全ではなく、セキュリティ要件が低いシステムでのみ使用できることに注意してください。