<TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=1>
<TBODY>
<TR>
<TD>算法</TD>
<TD>Salt长度</TD></TR>
<TR>
<TD>CRYPT_STD_DES</TD>
<TD>2-character (Default)</TD></TR>
<TR>
<TD>CRYPT_EXT_DES</TD>
<TD>9-character</TD></TR>
<TR>
<TD>CRYPT_MD5</TD>
<TD>12-character beginning with $1$</TD></TR>
<TR>
<TD>CRYPT_BLOWFISH</TD>
<TD>16-character beginning with $2$</TD></TR></TBODY></TABLE> 从表面上看,crypt()的函数似乎没有什么用处,但该函数的确被广泛用来保证系统密码的完整性。因为,单向加密的口令即使落入第三方的手里,由于不能被还原为明文,也没有什么大用处。 <B>用crypt()实现用户身份验证</B> 上一部分简单介绍了crypt()函数的功能,下面利用其来实现用户的身份验证,其所要实现的目标同19.2.3节所介绍的一致。
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e7e9e9 border=1>
<TBODY>
<TR>
<TD>1 <!--check_user_crypt.php:使用crypt() 函数验证用户---------------->2 <?php3 $user_name=$_POST["user_name"];4 require_once("sys_conf.inc"); //系统配置文件,包含数据库配置信息56 //连接数据库7 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);8 mysql_select_db($DBNAME); //选择数据库my_chat910 //查询是否存在登录用户信息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()对用户密码进行加密1819 //对于老用户20 if($rows!=0)21 {22 list($name,$pwd)=mysql_fetch_row($result);2324 //如果密码输入正确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 else33 {34 require("relogin.php");35 }3637 }38 //对于新用户,将其信息写入数据库39 else40 {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 ?></TD></TR></TBODY></TABLE> 示例与上一节所介绍的使用XOR加密算法来保护用户信息非常类似,其核心部分在于第16、17行使用crypt()函数获取加密后的密码,而通过在第25行比较数据库中的密码和加密后的密码是否相等来检查用户是否合法。 下面,通过一个实例来看一下加密后的密码会变成什么样子。 例如,用户名为rock,密码为123456,则加密后的密码为: 12tir.zIbWQ3c 上面就实现了一个简单的用户身份验证系统。在使用crypt()保护重要的机密信息时,需要注意的是,在缺省状态下使用crypt()并不是最安全的,只能用在对安全性要求较低的系统中。