PHP中使用crypt() 实现用户身份验证

时间:2010-01-16 10:38:19   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:ypt()相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能反过来将密码重新转换为原来的明码。crypt()函数定义如下。        string crypt (string input_string [, string salt])        其中,input_string参数是需要加密的明文字符串,第二个可选的salt是一个位字串,能够影响加密的暗码,...
  正文:

在开发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);
来源:http://www.002pc.com/master/College/Programming/PHP/11964.html

收藏到:

关于《PHP中使用crypt() 实现用户身份验证》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td