小小酥 2015-04-14 1730
这篇文章主要介绍了针对于项目开发中对于一些get参数和表单提交的处理方法,目的是不让参数以及进行表单提交时数据过分的暴露,整个加密过程通过异或的方法处理所提交的参数和数据,第一次加密是和随机的混淆字符 第二次则是和用户定义的key值,解密过程相同,只是为了完成相应的业务逻辑。这种方法简单也可以封装成类库在框架中使用,可自己在本地测试,接下来我们来实际的操作吧
<?php /** *@autor:chunrui :hongdachun [email protected] :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<$long;$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<$long;$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<$long;$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 '<br>'; //解密 $param = 'VCtdeF09ATMBdFw9UG5TY1pzVnQEYFNjV2lRbgYhXTpXcQdjXD1XdAU8CyJULgVuWn0Heg=='; $dcrypt = passport_decrypt($param,$key); var_dump($dcrypt);