当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机四级指导:PHP+MySQL应用中使用XOR运算加密算法
发布时间:2010/3/24 19:22:56 来源:城市学习网 编辑:admin

  PHP+MySQL应用中使用XOR运算加密算法
  本文将介绍一个简单易用的加密/解密算法:使用异或运算。本算法原理简单,旨在使读者对的加密/解密有一个更加直观的印象。XOR算法原理从加密的主要方法看,换位法过于简单,特别是对于数据量少 ...
  本文将介绍一个简单易用的加密/解密算法:使用异或运算。本算法原理简单,旨在使读者对的加密/解密有一个更加直观的印象。
  XOR算法原理
  从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。
  从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。
  相对于其他的简易加密算法,XOR算法的优点如下。
  算法简单,对于高级语言很容易能实现。
  速度快,可以在任何时候、任何地方使用。
  对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。
  XOR算法实现
  上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。
  1 <!--encrypy_xor:简单使用XOR运算的加密函数----------------------->
  2 <?php
  3 //加密函数
  4 function myEncrypt
  5
  12 }
  13 return $string;
  14 }
  第4行定义了加密函数myEncrypt,输入参数$string为明文,而$key为密钥;输出为使用$key作为密钥并使用XOR加密算法产生的密文。
  第6~12行的外层for循环对明文字符串的每一个字符进行循环,而内层的for循环对明文的每一字符循环与密钥的每一位做异或运算。其原理已经在上一小节中介绍,不再重述。
  同样,与加密函数类似,可以写出下面的解密函数。
  1 //解密函数
  2 function myDecrypt
  3
  10 }
  11 return $string;
  12 }
  13 ?>
  第4行定义了解密函数myDecrypt ,输入参数$string为密文,而$key为密钥;输出为使用$key作为密钥并使用XOR解密算法产生的明文。
  下面,通过一个应用示例来进一步说明加密函数的功能。
  1 //示例
  2 $my_password="chair";
  3 echo "my_password = $my_password";
  4 $my_key="1234567890";
  5 $my_password_en=myEncrypt;
  6 echo "my_password_en = $my_password_en";
  7 $my_password_de=myDecrypt;
  8 echo "my_password_de = $my_password_de";
  第3行首先定义了一个明文$my_password,然后在第4行定义密钥$my_key。
  第5、6行分别调用加密函数生成密文并输出;反过来,又在第7、8行将密文解密。
  上面示例的运行结果如下。
  my_password = chair
  my_password_en = RYPXC
  my_password_de = chair
  用XOR算法实现身份验证
  上两部分分别介绍了使用XOR运算进行加密/解密的原理和实现,下面,将使用这一方法来对用户的登录密码进行加密。本例中,为了保护用户的密码,系统想要达到的目的如下。
  在用户注册时,用户需要添写用户密码表单。
  除用户本人之外,其他任何人都无法获取其密码,包括系统设计者和数据库管理员。
  系统能根据用户输入的密码验证用户的合法性。
  为了达到以上目的,使用XOR算法时可以选择用户名作为明文,而密钥是用户自定义的密码,然后将加密后的用户名存储在数据库中。
  另外,在用户登录的时候,有以下两种方式来验证合法用户。
  根据其提交的用户名和密码重新加密,并使用加密后的与数据库中存储的密码进行比较,如果相等,则用户合法,否则,为非法用户。
  根据数据库中存储的密码和用户输入的密码进行解密,并把加密后的与用户提交的用户名进行比较,如果相等,则用户合法,否则,为非法用户。
  两种方式都可以实现第3个目的,本例,将采用第2种方式。本例的实现代码可在18.4.1节“用户登录”和18.4.2节“检查用户”的实现基础之上实现,其中“用户登录”页面无需变化,“检查用户”的实现参考如下。
  1 <?php
  2 session_start; //装载Session库,一定要放在首行
  3 $user_name=$_POST["user_name"];
  4 session_register; //注册$user_name变量,注意没有$符号
  5
  6 require_once; //系统配置文件,包含数据库配置
  7 require_once; //包含xor加密函数文件
  8
  9 //连接数据库
  10 $link_id=mysql_connect;
  11 mysql_select_db; //选择数据库my_chat
  12
  13 //查询是否存在登录用户
  14 $str="select name,password from user where name =‘$user_name‘";
  15 $result=mysql_query; //执行查询
  16 @$rows=mysql_num_rows; //取得查询结果的记录笔数
  17 $user_name=$_SESSION["user_name"];
  18 $password=$_POST["password"];
  19 $password_en=myEncrypt; //加密用户
  20
  21 //对于老用户
  22 if
  23
  34 //密码输入错误
  35 else
  36
  39 }
  40 //对于新用户,将其写入数据库
  41 else
  42
  47 //关闭数据库
  48 mysql_close;
  49 ?>
  第7行引入了加密函数文件encrypy_xor.php,包括上一小节介绍的两个函数。
  第19行,使用用户提交的用户名和密码得到加密后的密码值,并且对于新用户,在第44行将这个加密后的值存储在数据库中。
  另外,对于老用户,在第24获取数据库中用户名和加密后的密码,并在25行利用这两个值进行解密,然后在第28行通过比较解密后的值与用户提交的用户名来检查用户的合法性。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved