返回顶部
首页 > 资讯 > 数据库 >PHP+MySQL应用中如何使用XOR运算加密算法
  • 446
分享到

PHP+MySQL应用中如何使用XOR运算加密算法

2023-06-17 12:06:41 446人浏览 安东尼
摘要

PHP+MySQL应用中如何使用XOR运算加密算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。XOR算法原理从加密的主要方法看,换位法过于简单,特别是对于数据

PHP+MySQL应用中如何使用XOR运算加密算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

XOR算法原理

从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。

从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。

相对于其他的简易加密算法,XOR算法的优点如下。

(1)算法简单,对于高级语言很容易能实现。

(2)速度快,可以在任何时候、任何地方使用。

(3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。

XOR算法实现

上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录信息。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。

<!&ndash;encrypy_xor:简单使用XOR运算的加密函数&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;>  <?php  //加密函数  functionmyEncrypt($string,$key)  {  for($i=0;$i<STRLEN($STRING);p$i++)<>  {  for($j=0;$j<STRLEN($KEY);p$j++)<>  {  $string[$i]=$string[$i]^$key[$j];  }  }  return$string;  }

第4行定义了加密函数myEncrypt(),输入参数$string为明文,而$key为密钥;输出为使用$key作为密钥并使用XOR加密算法产生的密文。

第6~12行的外层for循环对明文字符串的每一个字符进行循环,而内层的for循环(第8~11行)对明文的每一字符循环与密钥的每一位做异或运算。其原理已经在上一小节中介绍,不再重述。

同样,与加密函数类似,可以写出下面的解密函数。

//解密函数  functionmyDecrypt($string,$key)  {  for($i=0;$i<STRLEN($STRING);p$i++)<>  {  for($j=0;$j<STRLEN($KEY);p$j++)<>  {  $string[$i]=$key[$j]^$string[$i];  }  }  return$string;  }  ?>

第4行定义了解密函数myDecrypt(),输入参数$string为密文,而$key为密钥;输出为使用$key作为密钥并使用XOR解密算法产生的明文。

下面,通过一个应用示例来进一步说明加密函数的功能。

//示例  $my_passWord=”chair”;  echo”my_password=$my_password”;  $my_key=”1234567890&Prime;;  $my_password_en=myEncrypt($my_password,$my_key);  echo”my_password_en=$my_password_en”;  $my_password_de=myDecrypt($my_password_en,$my_key);  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运算进行信息加密/解密的原理和实现,下面,将使用这一方法来对用户的登录密码进行加密。本例中,为了保护用户的密码,系统想要达到的目的如下。

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

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

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

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

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

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

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

两种方式都可以实现第3个目的,本例,将采用第2种方式。本例的实现代码可在18.4.1节“用户登录”和18.4.2节“检查用户”的实现基础之上实现,其中“用户登录”页面无需变化,“检查用户”的实现参考如下。

<?php  session_start();//装载Session库,一定要放在首行  $user_name=$_POST["user_name"];  session_reGISter(“user_name”);//注册$user_name变量,注意没有$符号   require_once(“sys_conf.inc”);//系统配置文件,包含数据库配置信息  require_once(“encrypy_xor.php”);//包含xor加密函数文件   //连接数据库  $link_id=Mysql_connect($DBHOST,$DBUSER,$DBPWD);  mysql_select_db($DBNAME);//选择数据库my_chat   //查询是否存在登录用户信息  $str=”selectname,passwordfromuserwherename=&rsquo;$user_name&rsquo;”;  $result=mysql_query($str,$link_id);//执行查询  @$rows=mysql_num_rows($result);//取得查询结果的记录笔数  $user_name=$_SESSION["user_name"];  $password=$_POST["password"];  $password_en=myEncrypt($user_name,$password);//加密用户信息   //对于老用户  if($rows!=0)  {  list($name,$pwd)=mysql_fetch_row($result);  $password_de=myDecrypt($pwd,$password);//解密用户信息   //如果密码输入正确  if($user_name==$password_de)  {  $str=”updateusersetis_online=1wherename=&rsquo;$user_name&rsquo;andpassword=&rsquo;$password_en&rsquo;”;  $result=mysql_query($str,$link_id);//执行查询  require(“main.php”);//转到聊天页面  }  //密码输入错误  else {  require(“relogin.php”);  }  }  //对于新用户,将其信息写入数据库  else {  $str=”insertintouser(name,password,is_online)values(&lsquo;$user_name&rsquo;,'$password_en&rsquo;,1)”;  $result=mysql_query($str,$link_id);//执行查询  require(“main.php”);//转到聊天页面  }  //关闭数据库  mysql_close($link_id);  ?>

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

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

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

自动生成密钥

上一部分介绍了如何使用XOR加密算法进行对用户信息的加密,其中,用户所输入的口令信息实际上成为了加密算法中的密钥,而用户名作为明文使用,虽然这能很好地完成功能,但是在逻辑上,这种方法似乎有些不合理。

本文将介绍一种自动生成密钥的技术,可以使用自动生成的密钥对用户提交的密码明文加密,使逻辑更加合理一些。

本例,假设生成的密钥为512位。代码如下。

<!&ndash;keygen.php:自动生成密钥&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;>  <?php   //自动生成长度为$len的密钥  functiongenerate_key($len)  {  $lowerbound=35;  $upperbound=96;  $strMyKey=”";   for($i=1;$i<=$len;$i++)  {  $rnd=rand(0,100);//产生随机数  $k=(($upperbound-$lowerbound)+1)*$rnd+$lowerbound;  $strMyKey=$strMyKey.$k;  }  return$strMyKey;  }   //将密钥写入文件$file_name  functionwrite_key($key,$file_name)  {  $filename=”C:\key.txt”;  $key=generate_key($key,512);   //使用添加模式打开$filename,文件指针将会在文件的末尾  if(!$handle=fopen($filename,&rsquo;w'))  {  print”不能打开文件$filename”;  exit;  }   //将$key写入到我们打开的文件中。  if(!fwrite($handle,$key))  {  print”不能写入到文件$filename”;  exit;  }  fclose($handle);  }   //读取密钥文件中的密钥  functionget_key($file_name)  {  //打开文件  $fp=fopen($file_name,”r”);  $result=”";  //逐行读取  while(!feof($fp))  {  $buffer=fgets($fp,4096);  $result=$result.$buffer;  }  return$result;  }   //  ?>

代码包括3个函数。

◆ generate_key($len):自动生成长度为$len的密钥

◆ write_key($key,$file_name):将密钥写入文件$file_name

◆ get_key($file_name):读取密钥文件$file_name中的密钥值

在使用时,当用户***次登录系统时,自动为其生成密钥值,对于这个密钥值,可以有两种方式来处理。

(1)将其存入数据库的某个字段中,这种方法的缺点是密钥在数据库中的安全性无法得到保证;

(2)将这个密钥保存在用户本地的文件中,这样就可以避免密钥被别人获取,但这种方式的缺点是,当用户使用其他机器访问系统时,就无法登录。

本例中,将使用第2种方式。

具体地,上面代码第11~18行通过生成随机数的方式来不断生成密钥,并通过一个计算来增强其复杂性。其中的lowerbound和upperbound的数值其实就是你想使用来加密的ASCII字符范围。下面是生成的一个密钥文件示例。

208123915925183361116049369344372701567721435181102718332639307390344373445407

524316475863232913993383189547474747394154915312639841226741894189965623523913

011164730113445201935692839710274127251577929493941487145611337531549110895367

593586318332391170941272701152344371709270125776235313540032267139933835677407

617384135696111239130732949469623520815987524358635491542913374933524334454251

400327015367133759324537171709152357391089524342514685239122673135531363151191

833412771743139654&hellip;

***,需要把密钥保存在服务器上一个安全的地方,然后就可以利用其和诸如XOR这样的加密算法来对用户信息进行加密/解密了。如何在上一部分介绍的XOR中使用这个密钥非常简单,不再详述。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: PHP+MySQL应用中如何使用XOR运算加密算法

本文链接: https://lsjlt.com/news/288972.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP+MySQL应用中如何使用XOR运算加密算法
    PHP+MySQL应用中如何使用XOR运算加密算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。XOR算法原理从加密的主要方法看,换位法过于简单,特别是对于数据...
    99+
    2023-06-17
  • C#中如何使用加密算法
    C#中如何使用加密算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#加密算法MD5的全称是message-digest algorithm 5(信息-摘要算法),在90...
    99+
    2023-06-17
  • MySQL如何使用加法和减法运算符进行日期运算?
    MySQL 可以通过将 INTERVAL 关键字与时间单位、日期或日期时间相加来使用加法和减法运算符执行日期算术。示例 1将 2 天添加到特定日期.mysql> Select '2017-05-20' + INTERV...
    99+
    2023-10-22
  • php中Mhash算法如何加密
    这篇文章主要介绍了php中Mhash算法如何加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、说明Mhash 提供了一个非常方便的 Salted S2K 算法可以用来方便...
    99+
    2023-06-15
  • MD5加密算法如何在java项目中运用
    这篇文章将为大家详细讲解有关 MD5加密算法如何在java项目中运用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java 中 MD5加密的实例主要代码如下package techDemo;...
    99+
    2023-05-31
    java md5 ava
  • 如何在php中使用算术运算符
    这篇文章将为大家详细讲解有关如何在php中使用算术运算符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的P...
    99+
    2023-06-14
  • php混淆加密算法怎么使用
    PHP混淆加密算法可用于保护源代码的安全性,防止代码被解析和修改。以下是一个使用PHP混淆加密算法的示例:1. 在开始之前,你需要安...
    99+
    2023-09-14
    php
  • PHP中怎么使用位运算实现加减乘除运算
    这篇文章主要介绍了PHP中怎么使用位运算实现加减乘除运算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。计算机最基本的操作单元是字节,一个字节由8个位组成,一个位只能存储一个0...
    99+
    2023-06-20
  • Go中使用加密算法的方法
    目录哈希算法加密模式对称加密⾮对称加密椭圆曲线加密算法ECC数字签名字符编码/解码巨人的肩膀哈希算法  md5 128bit,16字节 如:md5 (“he...
    99+
    2024-04-02
  • php中如何使用递减运算符
    本篇文章给大家分享的是有关php中如何使用递减运算符,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们先来了解一下什么叫做递减。顾名思义,递减就是逐渐减少,也就是说这个运算符可...
    99+
    2023-06-20
  • PHP中逻辑运算符如何使用
    本篇文章给大家分享的是有关PHP中逻辑运算符如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.字符串运算符例子:<php $a="Hello&...
    99+
    2023-06-17
  • 如何使用PHP实现C语言中的异或加密算法
    随着互联网的不断发展,网络安全问题越来越受到人们的关注,加密算法也越来越成为设计安全程序必不可少的组成部分。在很多程序开发中,我们需要对数据进行s安全的加密和解密,在PHP中,我们可以使用异或加密算法来保护数据的安全。本文将会详细介绍如何使...
    99+
    2023-05-14
  • PHP加密算法函数全面解析:password_hash、password_verify、openssl_encrypt等函数的加密算法应用
    PHP加密算法函数全面解析:password_hash、password_verify、openssl_encrypt等函数的加密算法应用在现代互联网世界中,数据安全成为了一件非常重要的事情。为了保护用户的隐私信息,我们需要对敏感数据进行加...
    99+
    2023-11-18
    password_hash password_verify PHP加密算法函数
  • 如何使用RSA算法实现数据加密
    使用RSA算法对数据进行加密的方法具体方法如下:#ifndef ENCRYPT_H#define ENCRYPT_Htypedef unsigned long Huge; typedef struct RsaPubKey_{Huge e;H...
    99+
    2024-04-02
  • C#如何使用SHA1算法对密码进行加密
    这篇文章给大家分享的是有关C#如何使用SHA1算法对密码进行加密的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#中如何使用SHA1对密码进行加密呢?在这里呢小编创建的是ASP.NET Web 项目应用程序,wi...
    99+
    2023-06-14
  • PHP中常用的加密算法有哪些?
    随着互联网的发展,数据安全已成为我们日常工作中必须关注的严肃问题。针对敏感的个人信息或商业数据,加密变得尤为重要。在PHP开发中,一些加密算法被广泛应用,下面我们就来了解一下PHP中常用的加密算法。一、Base64编码Base64编码常用于...
    99+
    2023-05-14
    PHP 加密算法 常用
  • ssl使用什么加密算法
    ssl使用的加密算法是对称加密算法,如:DES:数据加密标准,速度较快,适用于加密大量数据的场合。RSA:它是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。AES:高级加密标准,是下一代的加密算法标准,速度快,安全级别高...
    99+
    2024-04-02
  • SSL加密过程中使用了哪些加密算法
    SSL加密过程中使用了以下加密算法: 对称加密算法:SSL会使用对称加密算法来加密通信中的数据,如DES、3DES、AES等。 ...
    99+
    2024-04-17
    SSL证书
  • 怎么在PHP中使用RSA非对称加密算法
    本篇文章给大家分享的是有关怎么在PHP中使用RSA非对称加密算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言...
    99+
    2023-06-14
  • 如何在MySql中使用特殊运算符
    本篇文章给大家分享的是有关如何在MySql中使用特殊运算符,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. <=> 安全比较运算...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作