Php判断二中二算法中奖,PHP+MySQL应用中使用XOR运算加密算法(2)

本文介绍了如何使用XOR算法进行信息加密和解密,以及如何利用该算法实现用户登录密码的安全存储和验证。在示例中,用户密码经过XOR加密后存储在数据库中,登录时通过解密和比较来确认用户合法性。同时,文章展示了使用PHP实现这一过程的代码示例。
摘要由CSDN通过智能技术生成

第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($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";

第3行首先定义了一个明文$my_password,然后在第4行定义密钥$my_key。

第5、6行分别调用加密函数生成密文并输出;反过来,又在第7、8行将密文解密。

上面示例的运行结果如下。

my_password = chair

my_password_en = RYPXC

my_password_de = chair

用XOR算法实现身份验证

上两部分分别介绍了使用XOR运算进行信息加密/解密的原理和实现,下面,将使用这一方法来对用户的登录密码进行加密。本例中,为了保护用户的密码,系统想要达到的目的如下。

·在用户注册时,用户需要添写用户密码表单。

·除用户本人之外,其他任何人都无法获取其密码信息,包括系统设计者和数据库管理员。

·系统能根据用户输入的密码验证用户的合法性。

为了达到以上目的,使用XOR算法时可以选择用户名作为明文,而密钥是用户自定义的密码,然后将加密后的用户名存储在数据库中。

另外,在用户登录的时候,有以下两种方式来验证合法用户。

(1)根据其提交的用户名(明文)和密码(密钥)信息重新加密,并使用加密后的信息与数据库中存储的密码信息进行比较,如果相等,则用户合法,否则,为非法用户。

(2)根据数据库中存储的密码信息(明文)和用户输入的密码(密钥)信息进行解密,并把加密后的信息与用户提交的用户名进行比较,如果相等,则用户合法,否则,为非法用户。

两种方式都可以实现第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"); //注册$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 ?>

第7行引入了加密函数文件encrypy_xor.php,包括上一小节介绍的两个函数。

第19行,使用用户提交的用户名和密码得到加密后的密码值,并且对于新用户,在第44行将这个加密后的值存储在数据库中。

另外,对于老用户,在第24获取数据库中用户名和加密后的密码信息,并在25行利用这两个值进行解密,然后在第28行通过比较解密后的值与用户提交的用户名信息来检查用户的合法性。

(编辑:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值