ホームページ  >  記事  >  バックエンド開発  >  PHP で crypt() を使用してユーザー認証を実装する_PHP チュートリアル

PHP で crypt() を使用してユーザー認証を実装する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:03:081198ブラウズ

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() を使用してユーザー認証を実装します
前のパートでは、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);
?>

この例は、前のセクションで紹介したユーザー情報を保護するための XOR 暗号化アルゴリズムの使用と非常に似ています。核となる部分は、16 行目と 17 行目で crypt() 関数を使用して暗号化されたパスワードを取得し、そのパスワードを比較することです。データベースの 25 行目で、パスワードと暗号化されたパスワードが等しいかどうかをチェックして、ユーザーが正当であるかどうかを確認します。

それでは、暗号化されたパスワードがどのようになるかを例で見てみましょう。

たとえば、ユーザー名がrock、パスワードが123456の場合、暗号化されたパスワードは次のようになります:

12tir.zIbWQ3c

上記は簡単なユーザー認証システムを実装しています。重要な機密情報を保護するために crypt() を使用する場合、デフォルト状態での crypt() の使用は最も安全ではなく、セキュリティ要件が低いシステムでのみ使用できることに注意してください。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445306.html技術記事 crypt() 関数は、DES、Blowfish、または MD5 を使用して暗号化された文字列を返します。この関数はオペレーティング システムによって動作が異なり、一部のオペレーティング システムでは複数のアルゴリズム タイプがサポートされます。で...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。