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

2016-01-29 13:28 9 1 收藏

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

【 tulaoshi.com - PHP 】

  本文将介绍一个简单易用的加密/解密算法:使用异或(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 }
  第4行定义了加密函数myEncrypt(),输入参数$string为明文,而$key为密钥;输出为使用$key作为密钥并使用XOR加密算法产生的密文。

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

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

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 ?>
  第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)根据数据库中存储的密码信息(明文)和用户输入的密码(密钥)信息进行解密,并把加密后的信息与用户提交的用户名进行比较,如果相等,则用户合

来源:http://www.tulaoshi.com/n/20160129/1490282.html

延伸阅读
简介:PHP+MYSQL网站注入扫描工具,针对类似夜猫文章下 载系统比较有效,界面是仿教程的hdsi中的PHP注入模块写 的,实现原理是参考angel的SQL Injection with MYSQL 写的,网上有很多,不再细说。 界面截图: http://www.wrsky.com/attachment/3_1891.jpg 源码下载: http://downloads.2ccc.com/general/inter...
        第1章 基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。 通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难。但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安...
添加要签名的信息 public final byte[] sign() throws SignatureException 返回签名的数组,前提是initSign和update public final void initVerify(PublicKey publicKey) throws InvalidKeyException 用指定的公钥初始化 参数:publicKey 验证时用的公钥 public final boolean verify(byte[]...
  随着Internet的迅速发展,电子商务的浪潮势不可挡,日常工作和数据传输都放在Internet网上进行传输,大大提高了效率,降低了成本,创造了良好的效益。但是,由于Internet网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性,很容易伪造出IP包的地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容),使网上的信息传输...
先看看代码再说: 代码如下: package com.b510.note;  import java.math.BigInteger;  import java.security.MessageDigest;  import java.security.NoSuchAlgorithmException;  /**   * MD5加密   *   * @author Hongten   *   */  public class MD5 {      pub...

经验教程

533

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部