<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噜噜一区二区三区| 99re热免费精品视频观看| 亚洲自国产拍揄拍| 国内精品乱码卡1卡2卡3免费 | 国产成人AV免费观看| 亚洲啪啪AV无码片| 亚洲免费视频在线观看| 亚洲第一成年网站大全亚洲| 免费AA片少妇人AA片直播| 亚洲色偷偷综合亚洲av78 | 性生大片视频免费观看一级| 免费a级毛片18以上观看精品| 免费看又黄又爽又猛的视频软件| 在线观看午夜亚洲一区| 久久永久免费人妻精品| 亚洲另类古典武侠| 国产高清视频在线免费观看| 一个人看的免费高清视频日本| 亚洲精品高清国产一线久久| 蜜桃AV无码免费看永久| 亚洲一本之道高清乱码| 国产精品无码素人福利免费| sihu国产精品永久免费| 亚洲黄色在线观看视频| 成人免费视频88| a级片免费在线观看| 亚洲欧洲春色校园另类小说| 国产精品黄页在线播放免费| 成人自慰女黄网站免费大全| 久久综合亚洲鲁鲁五月天| 国产99视频免费精品是看6| 99re8这里有精品热视频免费| 亚洲一级毛片免费在线观看| 亚洲国产成人久久精品99 | 国产AV无码专区亚洲AV漫画| 18成禁人视频免费网站| 黄色三级三级三级免费看| 久久久亚洲AV波多野结衣| 国产乱色精品成人免费视频 |