
日期:2006-09-28 作者:喜腾小二 来源:PHPChina
本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。
XOR算法原理
从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。
从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。
相对于其他的简易加密算法,XOR算法的优点如下。
(1)算法简单,对于高级语言很容易能实现。
(2)速度快,可以在任何时候、任何地方使用。
(3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。
XOR算法实现
上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录信息。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。
| 1 <!--encrypy_xor:简单使用XOR运算的加密函数-----------------------> 2 <?php 3 //加密函数 4 function myEncrypt($string, $key) 5 { 6 for($i=0; $i<STRLEN($STRING); p $i++)<> 7 { 8 for($j=0; $j<STRLEN($KEY); p $j++)<> 9 { 10 $string[$i] = $string[$i]^$key[$j]; 11 } 12 } 13 return $string; 14 } |
| 1 //解密函数 2 function myDecrypt($string, $key) 3 { 4 for($i=0; $i<STRLEN($STRING); p $i++)<> 5 { 6 for($j=0; $j<STRLEN($KEY); p $j++)<> 7 { 8 $string[$i] = $key[$j]^$string[$i]; 9 } 10 } 11 return $string; 12 } 13 ?> |
| 1 //示例 2 $my_password="chair"; 3 echo "my_password = $my_password"; 4 $my_key="1234567890"; 5 $my_password_en=myEncrypt($my_password,$my_key); 6 echo "my_password_en = $my_password_en"; 7 $my_password_de=myDecrypt($my_password_en,$my_key); 8 echo "my_password_de = $my_password_de"; |
| 1 <?php 2 session_start(); //装载Session库,一定要放在首行 3 $user_name=$_POST["user_name"]; 4 session_register("user_name"); //注册$user_name变量,注意没有$符号 5 6 require_once("sys_conf.inc"); //系统配置文件,包含数据库配置信息 7 require_once("encrypy_xor.php"); //包含xor加密函数文件 8 9 //连接数据库 10 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD); 11 mysql_select_db($DBNAME); //选择数据库my_chat 12 13 //查询是否存在登录用户信息 14 $str="select name,password from user where name ='$user_name'"; 15 $result=mysql_query($str,$link_id); //执行查询 16 @$rows=mysql_num_rows($result); //取得查询结果的记录笔数 17 $user_name=$_SESSION["user_name"]; 18 $password=$_POST["password"]; 19 $password_en=myEncrypt($user_name,$password); //加密用户信息 20 21 //对于老用户 22 if($rows!=0) 23 { 24 list($name,$pwd)=mysql_fetch_row($result); 25 $password_de=myDecrypt($pwd,$password); //解密用户信息 26 27 //如果密码输入正确 28 if($user_name==$password_de) 29 { 30 $str="update user set is_online =1 where name ='$user_name' and password='$password_en'"; 31 $result=mysql_query($str, $link_id); //执行查询 32 require("main.php"); //转到聊天页面 33 } 34 //密码输入错误 35 else 36 { 37 require("relogin.php"); 38 } 39 } 40 //对于新用户,将其信息写入数据库 41 else 42 { 43 $str="insert into user (name,password,is_online) values('$user_name', '$password_en',1)"; 44 $result=mysql_query($str, $link_id); //执行查询 45 require("main.php"); //转到聊天页面 46 } 47 //关闭数据库 48 mysql_close($link_id); 49 ?> |