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

2016-01-29 13:28 26 1 收藏

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

【 tulaoshi.com - PHP 】

 在开发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-characterCRYPT_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()并不是最安全的,只能用在对安全性要求较低的系统中。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

来源:http://www.tulaoshi.com/n/20160129/1490292.html

延伸阅读
标签: 电脑入门
      金山游侠是一款功能强大的游戏修改软件,它提供了强悍的数据修改功能,可以对内存进行修改,且查找速度太快。我们知道,用游戏修改器可以对游戏中的数值进行修改,那我们能不能对qq号码进行修改呢?(因为qq号码也是数值的)将一个比较不常联系的qq号码修改为我们想要加却加不进去的qq号码呢?答案是可以的,因...
一.编辑httpd.conf加入Alias /admin/ "/home/kurt/www/admin"#设置虚拟目录picture到根目录 Options Indexes MultiViewsAllowOverride AuthConfigOrder Deny,AllowAllow from allOptions AllAllowOverride All 二.在E:/picture/下创建.htaccess文件authtype basicauthname "authname"authuserfile /home/kurt/www/admin/.h...
相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流。首先看具体界面,三个字段。名字,邮箱为选填,可以为空,建议不能为空。如有需要可以给我留言。   下面贴出布局代码,这里用到一个include layout="@layout/uphead"就是把另外一个布局文件引入到这个布局中。 代码如下: ?xml version="...
标签: 电脑入门
XP系统中允许设置多用户来提高用户们之间的安全性,所以在日常使用某台电脑时常常需要用到用户切换功能,今天图老师小编将指导大家如何进行用户切换。 使用注销菜单法 切换用户最常用的方法,就是通过注销菜单来访问用户切换功能。方法是:单击开始→注销,在打开的如图1所示的注销Windows对话框中,单击切换用户按钮,系统会保留当前会...
标签: ASP
  五、会话终止 当ASP会话结束时会运行global.asa中的Session_OnEnd方法,可以在这里删除 保存在Application("Users")数组中由于超时而被终止会话的用户。记录用户是由 于什么原因(超时还是显式退出)终止会话往往很有用处,下面的代码通过更新Users 表的TimedOut字段实现该功能: sub Session_OnEnd dim AppUsers dim ...

经验教程

377

收藏

28
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部