<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 閱讀(404) 評論(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

    主站蜘蛛池模板: 一级毛片免费毛片毛片| 在线观看亚洲天天一三视| 国产成人免费AV在线播放| 亚洲中文字幕无码av在线| 亚洲AV无码日韩AV无码导航| 免费在线视频一区| 女人18毛片水最多免费观看| 100部毛片免费全部播放完整| 国产免费人成视频尤勿视频| 亚洲AV无码一区二区三区久久精品| 2022年亚洲午夜一区二区福利 | 麻豆亚洲av熟女国产一区二| 区久久AAA片69亚洲| 午夜亚洲福利在线老司机| 日韩在线免费播放| 免费人成视频在线| 国产人在线成免费视频| 91九色老熟女免费资源站| 午夜影院免费观看| 中出五十路免费视频| 国产日韩久久免费影院 | www亚洲精品少妇裸乳一区二区| 拨牐拨牐x8免费| 国产一精品一AV一免费孕妇| 4hu四虎最新免费地址| 最近2022中文字幕免费视频| 99久久国产免费中文无字幕| 久99久精品免费视频热77| 久久久久久久岛国免费播放| 免费网站看av片| 午夜精品一区二区三区免费视频| 久久aa毛片免费播放嗯啊| 一级毛片免费毛片一级毛片免费| 日韩免费观看一区| 无码国产精品一区二区免费16| 在线观看肉片AV网站免费| 先锋影音资源片午夜在线观看视频免费播放| 嫩草在线视频www免费观看 | 国产精品亚洲片在线| 亚洲av日韩av天堂影片精品| 婷婷亚洲久悠悠色悠在线播放|