<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    PHP中使用crypt()實現用戶身份驗證

    Posted on 2006-09-28 11:46 my 閱讀(412) 評論(0)  編輯  收藏 所屬分類: php5

    在開發PHP應用中如果不想自己開發新的加密算法,還可以利用PHP提供的crypt()函數來完成單向加密功能。

      了解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節所介紹的一致。

    1 <!--check_user_crypt.php:使用crypt() 函數驗證用戶---------------->
    2 <?php
    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' and password='$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="insert into user (name,password,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()并不是最安全的,只能用在對安全性要求較低的系統中。

    posts - 63, comments - 45, trackbacks - 0, articles - 99

    Copyright © my

    主站蜘蛛池模板: 亚洲国产一区在线| 亚洲精品夜夜夜妓女网| 亚洲熟女综合色一区二区三区| 97av免费视频| 亚洲视频一区在线观看| 日本片免费观看一区二区| 亚洲精品永久www忘忧草| 亚洲免费在线视频播放| 中国亚洲呦女专区| 免费观看男人免费桶女人视频| 亚洲精品无码成人片久久不卡| 毛片免费观看视频| 亚洲国产综合AV在线观看| 国产在线19禁免费观看| 精品免费AV一区二区三区| 亚洲国产高清在线一区二区三区 | 亚洲精品蜜夜内射| 老司机永久免费网站在线观看| 日韩亚洲人成网站| 久久久久亚洲AV无码专区网站| 久久免费视频观看| 亚洲欧洲精品久久| 成人免费视频试看120秒| 日韩免费码中文在线观看| 国产成人精品日本亚洲网站| 国产精品视频白浆免费视频| 亚洲免费二区三区| 四虎影视免费永久在线观看| 巨胸狂喷奶水视频www网站免费| 亚洲免费视频网站| 免费看美女被靠到爽| 72pao国产成视频永久免费| 亚洲日韩图片专区第1页| 成人黄18免费视频| 久青草视频在线观看免费| 亚洲的天堂av无码| 亚洲成A人片在线观看中文| 99re视频精品全部免费| 亚洲Av永久无码精品黑人| 亚洲国产精品VA在线看黑人| 免费在线观看的网站|