国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 23:03:55
字體:
來源:轉載
供稿:網友
  在開發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_des2-character (default)
crypt_ext_des9-character
crypt_md512-character beginning with $1$
crypt_blowfish16-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()并不是最安全的,只能用在對安全性要求較低的系統中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 勐海县| 曲阳县| 红安县| 湖北省| 德格县| 拉孜县| 嘉荫县| 金门县| 突泉县| 喀什市| 荆州市| 巫溪县| 奇台县| 保康县| 湾仔区| 农安县| 克什克腾旗| 砀山县| 宝坻区| 凤山市| 西畴县| 龙海市| 平乐县| 灌阳县| 藁城市| 宁乡县| 芜湖县| 日照市| 宜兰市| 望城县| 新密市| 沂源县| 金川县| 凤翔县| 三都| 扎赉特旗| 沂南县| 深泽县| 高青县| 临沧市| 新津县|