天云网络 欢迎光临
简单PHP对称加密解密方法
发表于: | 分类: php | 评论:0 | 阅读:304

最近在项目中使用ThinkPHP自带的各种对称加密,在经过URL传输后出现解释不了的情况,无论使用URL转码还是什么,都不起作用,时好时坏,所以就自己随便写了一个加密解密的方法,希望能暂时满足项目的需求吧,目前至少一没有看到代码的人,是很难找到破解的方法的,而且满足在网络中传输后可以正常解码。同时也在这里分享一下,希望得到大家指正,以便完善下代码,哈哈!


  1. /**

  2.  * 简单对称加密算法之加密

  3.  * @param String $string 需要加密的字串

  4.  * @param String $skey 加密EKY

  5.  * @author Anyon Zou <zoujingli@qq.com>

  6.  * @date 2013-08-13 19:30

  7.  * @update 2014-10-10 10:10

  8.  * @return String

  9.  */

  10.  function encode($string = '', $skey = 'cxphp') {

  11.     $strArr = str_split(base64_encode($string));

  12.     $strCount = count($strArr);

  13.     foreach (str_split($skey) as $key => $value)

  14.         $key < $strCount && $strArr[$key].=$value;

  15.     return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));

  16.  }

  17.  /**

  18.  * 简单对称加密算法之解密

  19.  * @param String $string 需要解密的字串

  20.  * @param String $skey 解密KEY

  21.  * @author Anyon Zou <zoujingli@qq.com>

  22.  * @date 2013-08-13 19:30

  23.  * @update 2014-10-10 10:10

  24.  * @return String

  25.  */

  26.  function decode($string = '', $skey = 'cxphp') {

  27.     $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);

  28.     $strCount = count($strArr);

  29.     foreach (str_split($skey) as $key => $value)

  30.         $key <= $strCount  && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];

  31.     return base64_decode(join('', $strArr));

  32.  }

  33. echo '<pre>';

  34. $str = '56,15123365247,54,四大古典风格';

  35. echo "string : " . $str . " <br />";

  36. echo "encode : " . ($enstring = encode($str)) . '<br />';

  37. echo "decode : " . decode($enstring);

  38.  die();

测试结果如下:

为了感谢各位大神的捧场,对于此帖的提问我会积极答复,同时也想借这个平台与大家交流一下经验,谢谢!

【update - 2015/09/31】
修复短字符串解密时数组下标越界的问题

【update - 2016/06/21】
使用BASE64安全处理方案解决URL传输问题


  1. /**

  2.  * 安全URL编码

  3.  * @param type $data

  4.  * @return type

  5.  */

  6.  function encode($data) {

  7.     return str_replace(array('+', '/', '='), array('-', '_', ''), base64_encode(serialize($data)));

  8.  }

  9.  /**

  10.  * 安全URL解码

  11.  * @param type $string

  12.  * @return type

  13.  */

  14.  function decode($string) {

  15.     $data = str_replace(array('-', '_'), array('+', '/'), $string);

  16.     $mod4 = strlen($data) % 4;

  17.     ($mod4) && $data .= substr('====', $mod4);

  18.     return unserialize(base64_decode($data));

  19.  }


这是一个空白页面,如需使用评论框功能,请安装duoshuo插件。

Title - Artist
0:00

网站地图
Copyright © 2015-2016 天云网络
Powered by Typecho自豪的采用Sgreen主题,快递查询
苏ICP备16020206号

TOP
bst g22 jinniu lilai opebet orange88 vinbet xbet yuebo zunlong shijiebei bet007 hg0088 ju111 letiantang m88 mayaba qg777 qianyiguoji sbf777 tengbohui tlc ule weilianxier waiweitouzhu xingfayule xinhaotiandi yinheyule youfayule zhongying 2018shijiebei w88 18luck 188bet beplay manbet 12bet 95zz shenbo weide1946 ca88 88bifa aomenxinpujing betway bodog bt365 bwin tongbao vwin weinisiren 88jt fenghuangyule hongyunguoji 918botiantang huanyayule jianada28 jixiangfang libo long8 hongzuyishi zuqiutouzhu