crypt() 関数は、DES、Blowfish、または MD5 を使用して暗号化された文字列を返します。この関数はオペレーティング システムによって動作が異なり、一部のオペレーティング システムでは複数のアルゴリズム タイプがサポートされます。インストール時に、PHP は利用可能なアルゴリズムと使用されるアルゴリズムを確認します。
crypt()を理解する
Windows 以外のプラットフォームの使用経験が少しある読者は、crypt() に精通しているかもしれません。この関数は、一部のプレーン コードを暗号化できますが、パスワードを元のコードに戻すことはできません。オリジナルのコード。 crypt() 関数は次のように定義されます。
string crypt (string input_string [, string Salt])
このうち、input_string パラメータは暗号化する必要がある平文文字列で、2 番目のオプションのソルトはビット文字列で、暗号化されたパスワードに影響を与え、さらに解読される可能性を排除できます。デフォルトでは、PHP は 2 文字の DES 干渉文字列を使用します。システムが MD5 を使用する場合 (次のセクションを参照)、PHP は 12 文字の干渉文字列を使用します。システムが使用する干渉ストリングの長さは、次のコマンドを実行することで確認できます。
「私のシステムのソルトサイズは: CRYPT_SALT_LENGTH;」を印刷します。
crypt() は 4 つの暗号化アルゴリズムをサポートしています。表 19.1 に、サポートされているアルゴリズムと対応する Salt パラメーターの長さを示します。テーブルcrypt()は4つの暗号化アルゴリズムをサポートします
アルゴリズムソルトの長さ
CRYPT_STD_DES 2 文字 (デフォルト)
CRYPT_EXT_DES 9 文字
CRYPT_MD5 $1$で始まる12文字
CRYPT_BLOWFISH $2$ で始まる 16 文字
crypt() を使用してユーザー認証を実装します
前のパートでは、crypt() 関数の機能を簡単に紹介しました。次に、これを使用してユーザー認証を実装します。達成すべき目標は、セクション 19.2.3 で紹介したものと同じです。
$user_name=$_POST["user_name"];
require_once("sys_conf.inc"); //データベース構成情報を含むシステム構成ファイル
//データベースに接続します
$link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
mysql_select_db($DBNAME); //データベース my_chat を選択します
//ログインユーザー情報があるか問い合わせます
$str="名前 ='$user_name' のユーザーから名前、パスワードを選択します。";
$result=mysql_query($str,$link_id) //クエリを実行します
@$rows=mysql_num_rows($result); //クエリ結果から取得したレコード数
$user_name=$_SESSION["user_name"];
$password=$_POST["パスワード"];
$salt = substr($password, 0, 2);
$password_en=crypt($password,$salt); // crypt() を使用してユーザーのパスワードを暗号化します
//古いユーザー向け
if($rows!=0)
{
list($name,$pwd)=mysql_fetch_row($result);
//パスワードが正しく入力されていれば
if($pwd==$password_en)
{
$str="更新ユーザー セット is_online =1 ここで、名前 ='$user_name' およびパスワード ='$password_en'";
$result=mysql_query($str, $link_id);//クエリを実行
require("main.php"); //チャットページに移動します
}
//パスワード入力エラー
それ以外
{
require("relogin.php");
}
}
//新規ユーザーの場合は、データベースに情報を書き込みます
それ以外
{
$str="ユーザー (名前,パスワード,is_online) 値に挿入 ('$ユーザー名','$パスワード_en',1)";
$result=mysql_query($str, $link_id) //クエリを実行します
require("main.php"); //チャットページに移動します
}
//データベースを閉じます
mysql_close($link_id);
?>
それでは、暗号化されたパスワードがどのようになるかを例で見てみましょう。
たとえば、ユーザー名がrock、パスワードが123456の場合、暗号化されたパスワードは次のようになります:
12tir.zIbWQ3c
上記は簡単なユーザー認証システムを実装しています。重要な機密情報を保護するために crypt() を使用する場合、デフォルト状態での crypt() の使用は最も安全ではなく、セキュリティ要件が低いシステムでのみ使用できることに注意してください。