了解crypt()
只要有一点使用非Windows平台经验的读者都可能对crypt()相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能反过来将密码重新转换为原来的明码。crypt()函数定义如下。
string crypt (string input_string [, string salt])
其中,input_string参数是需要加密的明文字符串,第二个可选的salt是一个位字串,能够影响加密的暗码,进一步排除被破解的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果系统使用的是MD5(参考下一节内容),PHP则会使用一个12个字符的干扰串。可以通过执行下面的命令发现系统将要使用的干扰串的长度。
print "My system salt size is: ". CRYPT_SALT_LENGTH;
crypt()支持4种加密算法,表19.1显示了其支持的算法和相应的salt参数的长度。
表crypt()支持四种加密算法
算法 |
Salt长度 |
CRYPT_STD_DES |
2-character (Default) |
CRYPT_EXT_DES |
9-character |
CRYPT_MD5 |
12-character beginning with $1$ |
CRYPT_BLOWFISH |
16-character beginning with $2$ |
表面上、crypt() 関数はほとんど役に立たないように見えますが、この関数は実際にシステム パスワードの整合性を保証するために広く使用されています。なぜなら、一方向暗号化パスワードは第三者の手に渡っても平文に戻すことができないため、あまり役に立たないからです。
crypt() を使用してユーザー認証を実装する
前のパートでは、crypt() 関数の機能を簡単に紹介しました。次に、この関数を使用してユーザー認証を実装します。達成したい目標はセクション 19.2 で紹介したものと同じです。 .3。
コードをコピーします コードは次のとおりです:
< ;?php
$user_name=$_POST["user_name"]; //データベース構成情報を含むシステム構成ファイル
//データベースに接続します
$link_id=mysql_connect($DBHOST,$ DBUSER,$DBPWD);
mysql_select_db($DBNAME); //データベース my_chat を選択
//ログイン ユーザー情報があるかどうかをクエリ
$str="select name,password from user where name ='$user_name'";
$result =mysql_query($str,$link_id); //クエリを実行
@$rows=mysql_num_rows($result); //クエリ結果のレコード数を取得
$user_name=$ _SESSION["user_name"];
$password= $_POST["password"];
$salt = substr($password,$salt); //暗号化を使用します。 () ユーザーのパスワードを暗号化します
//古いユーザーの場合
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" ; {
$str="ユーザー (名前,パスワード,is_online) に挿入 value('$user_ name','$password_en',1)";
$result =mysql_query($str, $link_id); //クエリを実行します
require("main.php"); //チャットページに移動します
}
//データベースを閉じます
mysql_close($link_id);
この例は、前のセクションで紹介した XOR 暗号化アルゴリズムと同じです。ユーザー情報を保護するために非常に似ています。重要な部分は、crypt() 関数を使用して 16 行目と 17 行目で暗号化されたパスワードを取得することです。データベース内のパスワードと 25 行目の暗号化されたパスワードを比較して、ユーザーが正当であるかどうかを確認します。
それでは、暗号化されたパスワードがどのようになるかを例を挙げて見てみましょう。
例えば、ユーザー名がrock、パスワードが123456の場合、暗号化されたパスワードは、
12tir.zIbWQ3c
上記は、簡単なユーザー認証システムを実装しています。重要な機密情報を保護するために crypt() を使用する場合、デフォルト状態での crypt() の使用は最も安全ではなく、セキュリティ要件が低いシステムでのみ使用できることに注意してください。
http://www.bkjia.com/PHPjc/325865.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325865.html
技術記事
crypt() について Windows 以外のプラットフォームを使用した経験のある読者は、crypt() についてよく知っているかもしれませんが、これは一部のプレーン コードを暗号化することができます。