dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>PHP>php技术资料>文章内容
PHP中使用crypt()实现用户身份验证
来源:CSDN     作者:    
  在开发PHP应用中如果不想自己开发新的加密算法,还可以利用提供的crypt()来完成单向加密功能。

  了解crypt()

  只要有一点使用非Windows平台经验的读者都可能对crypt()相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能反过来将密码重新转换为原来的明码。crypt()定义如下。

  string crypt (string input_string [, string salt])

  其中,input_string参数是需要加密的明文字符串,第二个可选的salt是一个位字串,能够影响加密的暗码,进一步排除被破解的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果系统使用的是MD5(参考下一节内容),则会使用一个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.:使用crypt() 验证用户---------------->
2 <?
3 $user_name=$_POST["user_name"];
4 require_once("sys_conf.inc"); //系统配置文件,包含配置信息
5
6 //连接
7 $link_id=_connect($DBHOST,$DBUSER,$DBPWD);
8 _select_db($DBNAME); //选择my_chat
9
10 //查询是否存在登录用户信息
11 $str="select name,password from user where name ='$user_name'";
12 $result=_query($str,$link_id); //执行查询
13 @$rows=_num_rows($result); //取得查询结果的记录笔数
14 $user_name=$_["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)=_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=_query($str, $link_id);//执行查询
29 require("main."); //转到聊天页面
30 }
31 //密码输入错误
32 else
33 {
34 require("relogin.");
35 }
36
37 }
38 //对于新用户,将其信息写入
39 else
40 {
41 $str="insert into user (name,password,is_online) values('$user_ name','$password_en',1)";
42 $result=_query($str, $link_id); //执行查询
43 require("main."); //转到聊天页面
44 }
45 //关闭
46 _close($link_id);
47 ?>

  示例与上一节所介绍的使用XOR加密算法来保护用户信息非常类似,其核心部分在于第16、17行使用crypt()获取加密后的密码,而通过在第25行比较中的密码和加密后的密码是否相等来检查用户是否合法。

  下面,通过一个实例来看一下加密后的密码会变成什么样子。

  例如,用户名为rock,密码为123456,则加密后的密码为:

  12tir.zIbWQ3c

  上面就实现了一个简单的用户身份验证系统。在使用crypt()保护重要的机密信息时,需要注意的是,在缺省状态下使用crypt()并不是最安全的,只能用在对安全性要求较低的系统中。

 

 

上一篇:PHP+MySQL应用中使用XOR运算加密算法   下一篇:使用PHP和AJAX的XML编程
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·通过对PHP服务器端特性的配置加
·php与mysql三日通
·AJAX技术在PHP开发中的简单应用
·大家所使用的PHP开发环境
·PHP缓存的实现
·针对PHP新手总结的PHP基础知识
·一个简单实现多条件查询的例子
·PHP串行化变量和序列化对象
·PHP表单
·推荐阅读:php技术生成静态页面
·php实用函数
·php生成随机数
  相关文章
·PHP+MySQL应用中使用XOR运算加密
·使用PHP和AJAX的XML编程
·PHP下一代的五个framework介绍
·AJAX在PHP中的简单使用
·PHP新手总结的PHP基础知识
·利用PHP+JavaScript打造AJAX搜
·PHP5 OOP编程中的代理与异常定制
·结合AJAX进行PHP开发之入门
·通过缓存数据库结果提高PHP性能
·结合AJAX的PHP开发之后退、前进
·大型系统上PHP令人不爽的九大原
·PHP开发入门教程之面向对象
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763