PHP可逆加密解密字符串 - 双向转码

代码及示例


     * @refer https://blog.csdn.net/qq_26605049/article/details/88866195
     *
     * @param string $string 原始字符串 或 已转码字符串
     * @param string $operation | 模式:加密encode,解密decode
     * @param string $key | 加密密码 - 默认"token"
     * @return string
     */
    function revEnc ($string, $operation = 'encode', $key = 'token') {
        $key=md5($key);
        $key_length=strlen($key);
        $string=$operation=='decode'?base64_decode($string):substr(md5($string.$key),0,8).$string;
        $string_length=strlen($string);
        $rndkey=$box=array();
        $result='';
        for($i=0;$i<=255;$i++){
            $rndkey[$i]=ord($key[$i%$key_length]);
            $box[$i]=$i;
        }
        for($j=$i=0;$i<256;$i++){
            $j=($j+$box[$i]+$rndkey[$i])%256;
            $tmp=$box[$i];
            $box[$i]=$box[$j];
            $box[$j]=$tmp;
        }
        for($a=$j=$i=0;$i<$string_length;$i++){
            $a=($a+1)%256;
            $j=($j+$box[$a])%256;
            $tmp=$box[$a];
            $box[$a]=$box[$j];
            $box[$j]=$tmp;
            $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
        }
        if($operation=='decode'){
            if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){
                return substr($result,8);
            }else{
                return'';
            }
        }else{
            return str_replace('=','',base64_encode($result));
        }
    }

    $string = 'show tables';
    echo 'revEnc('.$string.') = '.revEnc($string, 'encode').'
'; $encoded_str = 'j/bJYrtVTqxME/JeCBAwx65F4Q'; echo 'revEnc('.$encoded_str.') = '.revEnc($encoded_str, 'decode').'
'; /** * 结果: * * revEnc('show tables') = 'j/bJYrtVTqxME/JeCBAwx65F4Q' * revEnc('j/bJYrtVTqxME/JeCBAwx65F4Q') = 'show tables' */

 

 

 

你可能感兴趣的:(开发,PHP,加密解密,PHP,encode,可逆)