写在最前
这篇文章主要介绍了针对于项目开发中对于一些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);