简单PHP对称加密解密方法

2 篇文章 0 订阅

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

    /**
     * 简单对称加密算法之加密
     * @param String $string 需要加密的字串
     * @param String $skey 加密EKY
     * @author Anyon Zou <zoujingli@qq.com>
     * @date 2013-08-13 19:30
     * @update 2014-10-10 10:10
     * @return String
     */
    function encode($string = '', $skey = 'cxphp') {
        $strArr = str_split(base64_encode($string));
        $strCount = count($strArr);
        foreach (str_split($skey) as $key => $value)
            $key < $strCount && $strArr[$key].=$value;
        return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));
    }
    /**
     * 简单对称加密算法之解密
     * @param String $string 需要解密的字串
     * @param String $skey 解密KEY
     * @author Anyon Zou <zoujingli@qq.com>
     * @date 2013-08-13 19:30
     * @update 2014-10-10 10:10
     * @return String
     */
    function decode($string = '', $skey = 'cxphp') {
        $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);
        $strCount = count($strArr);
        foreach (str_split($skey) as $key => $value)
            $key <= $strCount  && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
        return base64_decode(join('', $strArr));
    }
    echo '<pre>';
    $str = '56,15123365247,54,四大古典风格';
    echo "string : " . $str . " <br />";
    echo "encode : " . ($enstring = encode($str)) . '<br />';
    echo "decode : " . decode($enstring);
    die();

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

【update - 2016/06/21】
使用ba

    /**
     * 安全URL编码
     * @param type $data
     * @return type
     */
    function encode($data) {
        return str_replace(array('+', '/', '='), array('-', '_', ''), base64_encode(serialize($data)));
    }
    /**
     * 安全URL解码
     * @param type $string
     * @return type
     */
    function decode($string) {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        ($mod4) && $data .= substr('====', $mod4);
        return unserialize(base64_decode($data));
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值