PHP教程之PHP中利用crypt()完成用户身份验证
我假设你目前已经可以完成一个静态页面了,当然,做的好看难看是另外一说,皮皮我的第一个网页也没好看到哪去,但是“孩子”再丑,咱们做“爹妈”的也不能嫌弃不是?这毕竟是咱的成果。 在开辟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()并非最平安的,只能用在对平安性请求较低的体系中。算是1个熟悉的过程,所以c语言的基础有就更好,没有也不怕。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 当然这种网站的会员费就几十块钱。 其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 兴趣是最好的老师,百度是最好的词典。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
页:
[1]