最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > php教程

PHP+MySQL使用XOR运算加密算法

日期:07-16    来源:中国设计秀    作者:cnwebshow.com

  本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。4CU中国设计秀
4CU中国设计秀
  XOR算法原理4CU中国设计秀
4CU中国设计秀
  从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。4CU中国设计秀
4CU中国设计秀
  从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。4CU中国设计秀
4CU中国设计秀
  相对于其他的简易加密算法,XOR算法的优点如下。4CU中国设计秀
4CU中国设计秀
  (1)算法简单,对于高级语言很容易能实现。4CU中国设计秀
4CU中国设计秀
  (2)速度快,可以在任何时候、任何地方使用。4CU中国设计秀
4CU中国设计秀
  (3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。4CU中国设计秀
4CU中国设计秀
  XOR算法实现4CU中国设计秀
4CU中国设计秀
  上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录信息。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。4CU中国设计秀
4CU中国设计秀
 4CU中国设计秀

1 <!--encrypy_xor:简单使用XOR运算的加密函数----------------------->4CU中国设计秀
2 <?php4CU中国设计秀
3 //加密函数4CU中国设计秀
4 function myEncrypt($string, $key)4CU中国设计秀
5 {4CU中国设计秀
6 for($i=0; $i<STRLEN($STRING); p $i++)<>4CU中国设计秀
7 {4CU中国设计秀
8 for($j=0; $j<STRLEN($KEY); p $j++)<>4CU中国设计秀
9 {4CU中国设计秀
10 $string[$i] = $string[$i]^$key[$j];4CU中国设计秀
11 }4CU中国设计秀
12 }4CU中国设计秀
13 return $string;4CU中国设计秀
14 }

4CU中国设计秀
  第4行定义了加密函数myEncrypt(),输入参数$string为明文,而$key为密钥;输出为使用$key作为密钥并使用XOR加密算法产生的密文。4CU中国设计秀
4CU中国设计秀
  第6~12行的外层for循环对明文字符串的每一个字符进行循环,而内层的for循环(第8~11行)对明文的每一字符循环与密钥的每一位做异或运算。其原理已经在上一小节中介绍,不再重述。4CU中国设计秀
4CU中国设计秀
  同样,与加密函数类似,可以写出下面的解密函数。4CU中国设计秀
4CU中国设计秀
 4CU中国设计秀

1 //解密函数4CU中国设计秀
2 function myDecrypt($string, $key)4CU中国设计秀
3 {4CU中国设计秀
4 for($i=0; $i<STRLEN($STRING); p $i++)<>4CU中国设计秀
5 {4CU中国设计秀
6 for($j=0; $j<STRLEN($KEY); p $j++)<>4CU中国设计秀
7 {4CU中国设计秀
8 $string[$i] = $key[$j]^$string[$i];4CU中国设计秀
9 }4CU中国设计秀
10 }4CU中国设计秀
11 return $string;4CU中国设计秀
12 }4CU中国设计秀
13 ?>

4CU中国设计秀
  第4行定义了解密函数myDecrypt (),输入参数$string为密文,而$key为密钥;输出为使用$key作为密钥并使用XOR解密算法产生的明文。4CU中国设计秀
4CU中国设计秀
  下面,通过一个应用示例来进一步说明加密函数的功能。4CU中国设计秀
4CU中国设计秀
 4CU中国设计秀

1 //示例4CU中国设计秀
2 $my_password="chair";4CU中国设计秀
3 echo "my_password = $my_password";4CU中国设计秀
4 $my_key="1234567890";4CU中国设计秀
5 $my_password_en=myEncrypt($my_password,$my_key);4CU中国设计秀
6 echo "my_password_en = $my_password_en";4CU中国设计秀
7 $my_password_de=myDecrypt($my_password_en,$my_key);4CU中国设计秀
8 echo "my_password_de = $my_password_de";

4CU中国设计秀
  第3行首先定义了一个明文$my_password,然后在第4行定义密钥$my_key。4CU中国设计秀
4CU中国设计秀
  第5、6行分别调用加密函数生成密文并输出;反过来,又在第7、8行将密文解密。4CU中国设计秀
4CU中国设计秀
  上面示例的运行结果如下。4CU中国设计秀
4CU中国设计秀
  my_password = chair4CU中国设计秀
4CU中国设计秀
  my_password_en = RYPXC4CU中国设计秀
4CU中国设计秀
  my_password_de = chair4CU中国设计秀
4CU中国设计秀
  用XOR算法实现身份验证4CU中国设计秀
4CU中国设计秀
  上两部分分别介绍了使用XOR运算进行信息加密/解密的原理和实现,下面,将使用这一方法来对用户的登录密码进行加密。本例中,为了保护用户的密码,系统想要达到的目的如下。4CU中国设计秀
4CU中国设计秀
  ·在用户注册时,用户需要添写用户密码表单。4CU中国设计秀
4CU中国设计秀
  ·除用户本人之外,其他任何人都无法获取其密码信息,包括系统设计者和数据库管理员。4CU中国设计秀
4CU中国设计秀
  ·系统能根据用户输入的密码验证用户的合法性。4CU中国设计秀
4CU中国设计秀
  为了达到以上目的,使用XOR算法时可以选择用户名作为明文,而密钥是用户自定义的密码,然后将加密后的用户名存储在数据库中。4CU中国设计秀
4CU中国设计秀
  另外,在用户登录的时候,有以下两种方式来验证合法用户。4CU中国设计秀
4CU中国设计秀
  (1)根据其提交的用户名(明文)和密码(密钥)信息重新加密,并使用加密后的信息与数据库中存储的密码信息进行比较,如果相等,则用户合法,否则,为非法用户。4CU中国设计秀
4CU中国设计秀
  (2)根据数据库中存储的密码信息(明文)和用户输入的密码(密钥)信息进行解密,并把加密后的信息与用户提交的用户名进行比较,如果相等,则用户合法,否则,为非法用户。4CU中国设计秀
4CU中国设计秀
  两种方式都可以实现第3个目的,本例,将采用第2种方式。本例的实现代码可在18.4.1节“用户登录”和18.4.2节“检查用户”的实现基础之上实现,其中“用户登录”页面无需变化,“检查用户”的实现参考如下。4CU中国设计秀
4CU中国设计秀
 4CU中国设计秀

1 <?php4CU中国设计秀
2 session_start(); //装载Session库,一定要放在首行4CU中国设计秀
3 $user_name=$_POST["user_name"];4CU中国设计秀
4 session_register("user_name"); //注册$user_name变量,注意没有$符号4CU中国设计秀
54CU中国设计秀
6 require_once("sys_conf.inc"); //系统配置文件,包含数据库配置信息4CU中国设计秀
7 require_once("encrypy_xor.php"); //包含xor加密函数文件4CU中国设计秀
84CU中国设计秀
9 //连接数据库4CU中国设计秀
10 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);4CU中国设计秀
11 mysql_select_db($DBNAME); //选择数据库my_chat4CU中国设计秀
124CU中国设计秀
13 //查询是否存在登录用户信息4CU中国设计秀
14 $str="select name,password from user where name ='$user_name'";4CU中国设计秀
15 $result=mysql_query($str,$link_id); //执行查询4CU中国设计秀
16 @$rows=mysql_num_rows($result); //取得查询结果的记录笔数4CU中国设计秀
17 $user_name=$_SESSION["user_name"];4CU中国设计秀
18 $password=$_POST["password"];4CU中国设计秀
19 $password_en=myEncrypt($user_name,$password); //加密用户信息4CU中国设计秀
204CU中国设计秀
21 //对于老用户4CU中国设计秀
22 if($rows!=0)4CU中国设计秀
23 {4CU中国设计秀
24 list($name,$pwd)=mysql_fetch_row($result);4CU中国设计秀
25 $password_de=myDecrypt($pwd,$password); //解密用户信息4CU中国设计秀
264CU中国设计秀
27 //如果密码输入正确4CU中国设计秀
28 if($user_name==$password_de)4CU中国设计秀
29 {4CU中国设计秀
30 $str="update user set is_online =1 where name ='$user_name' and password='$password_en'";4CU中国设计秀
31 $result=mysql_query($str, $link_id); //执行查询4CU中国设计秀
32 require("main.php"); //转到聊天页面4CU中国设计秀
33 }4CU中国设计秀
34 //密码输入错误4CU中国设计秀
35 else4CU中国设计秀
36 {4CU中国设计秀
37 require("relogin.php");4CU中国设计秀
38 }4CU中国设计秀
39 }4CU中国设计秀
40 //对于新用户,将其信息写入数据库4CU中国设计秀
41 else4CU中国设计秀
42 {4CU中国设计秀
43 $str="insert into user (name,password,is_online) values('$user_name', '$password_en',1)";4CU中国设计秀
44 $result=mysql_query($str, $link_id); //执行查询4CU中国设计秀
45 require("main.php"); //转到聊天页面4CU中国设计秀
46 }4CU中国设计秀
47 //关闭数据库4CU中国设计秀
48 mysql_close($link_id);4CU中国设计秀
49 ?>

4CU中国设计秀
  第7行引入了加密函数文件encrypy_xor.php,包括上一小节介绍的两个函数。4CU中国设计秀
4CU中国设计秀
  第19行,使用用户提交的用户名和密码得到加密后的密码值,并且对于新用户,

本文引用地址:/bc/article_58188.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明