簡單PHP對稱加密解密方法

最近在項目中使用ThinkPHP自帶的各種對稱加密,在經過URL傳輸後出現解釋不了的情況,無論使用URL轉碼還是什麼,都不起作用,時好時壞,所以就自己隨便寫了一個加密解密的方法,希望能暫時滿足項目的需求吧,目前至少一沒有看到代碼的人,是很難找到破解的方法的,而且滿足在網絡中傳輸後可以正常解碼。同時也在這裏分享一下,希望得到大家指正,以便完善下代碼,哈哈!

    /**
     * 簡單對稱加密算法之加密
     * @param String $string 需要加密的字串
     * @param String $skey 加密EKY
     * @author Anyon Zou <[email protected]>
     * @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 <[email protected]>
     * @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));
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章