php异或加密算法,简单的异或加密解密算法

写在最前

这篇文章主要介绍了针对于项目开发中对于一些get参数和表单提交的处理方法,目的是不让参数以及进行表单提交时数据过分的暴露,整个加密过程通过异或的方法处理所提交的参数和数据,第一次加密是和随机的混淆字符 第二次则是和用户定义的key值,解密过程相同,只是为了完成相应的业务逻辑。这种方法简单也可以封装成类库在框架中使用,可自己在本地测试,接下来我们来实际的操作吧:

代码示例<?php

/**

*@autor:chunrui :hongdachun

*@date :2015.04.13

*@introduce:比较实用的简单算法介绍

*①简单加密算法:按位异或(xor) 进行加密解密

**/

//加密

function passport_encrypt($param,$key) {

$encrypt_key = md5(rand(0,32000));//得到一个随机的字符串,生成一个32位的加密混淆字符串

$ctr = 0;

$tmp = '';

$long = strlen($param);//得到$param的长度

$keylong = strlen($encrypt_key);//得到encrypt_key 混淆字符串的长度

//循环

for($i=0;$i

$ctr = $ctr == $keylong ? 0:$ctr;//如果ctr满32 置0

//tmp 使用混淆字符串的第ctr个字符链接第一个加密字节和混淆字符串的第ctr++个字节的异或结果

$tmp .= $encrypt_key[$ctr].($param[$i]^$encrypt_key[$ctr++]);

}

return base64_encode(passport_key($tmp,$key));//将结果和用户的key再次异或然后进行编码

}

//解密

function passport_decrypt($param,$key) {

//首先进行解码 然后将结果进行第二次异或还原(这时param变量会变为第一次异或前的结果 ==加密时的$tmp)

$param = passport_key(base64_decode($param),$key);

$tmp = '';

$long = strlen($param);

for($i=0;$i

$md5 = $param[$i];  //变量中隐含的异或字符;

$tmp .=$param[++$i] ^ $md5; //然后异或 解密

}

return $tmp;

}

//对数据的处理的方法

function passport_key($param,$encrypt_key)

{

$encrypt_key = md5($encrypt_key);

$ctr = 0;

$tmp = '';

$long = strlen($param);

$keylong = strlen($encrypt_key);

for($i=0;$i

$ctr = $ctr == $keylong ?0:$ctr;

$tmp .=$param[$i]^$encrypt_key[$ctr++];

}

return $tmp;

}

//测试

$param = array('id'=>12,'name'=>'chunrui');

$param = json_encode($param);

$key = '20150413';

//加密

$crypt = passport_encrypt($param,$key);

var_dump($crypt);

echo '
';

//解密

$param = 'VCtdeF09ATMBdFw9UG5TY1pzVnQEYFNjV2lRbgYhXTpXcQdjXD1XdAU8CyJULgVuWn0Heg==';

$dcrypt = passport_decrypt($param,$key);

var_dump($dcrypt);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值