美文网首页
贴一对php双向加密函数

贴一对php双向加密函数

作者: 行百里 | 来源:发表于2016-01-21 22:39 被阅读1149次

加密函数:输入参数字符串,返回机密字符串。
Coding::tiriEncode(String)
解密函数:输入上边函数的加密结果,反解到加密前字符串
Coding::tiriDecode(String)

特点:
1.同一个输入,每次输出都不同,可以有若干个加密后的版本。无论密文什么样,都能反解回原文,无信息损失。
2.完全自己写的,估计网上没有完全类似的。用了多年,一直挺靠谱的。

如果有同学感兴趣,可以拿去自用

namespace Tiri\Widget;
class Coding{

    static function  tiriEncode($str , $factor = 0){
        $len = strlen($str);
        if(!$len){
            return;
        }
        if($factor  === 0){
            $factor = mt_rand(1, min(255 , ceil($len / 3)));
        }
        $c = $factor % 8;

        $slice = str_split($str ,$factor);
        for($i=0;$i < count($slice);$i++){
            for($j=0;$j< strlen($slice[$i]) ;$j ++){
                $slice[$i][$j] = chr(ord($slice[$i][$j]) + $c + $i);
            }
        }
        $ret = pack('C' , $factor).implode('' , $slice);
        return self::base64URLEncode($ret);
    }

    static function tiriDecode($str){  
        if($str == ''){
            return;
        }     
        $str = self::base64URLDecode($str);
        $factor =  ord(substr($str , 0 ,1));
        $c = $factor % 8;
        $entity = substr($str , 1);
        $slice = str_split($entity , $factor);
        if(!$slice){
            return false;
        }
        for($i=0;$i < count($slice); $i++){
            for($j =0 ; $j < strlen($slice[$i]); $j++){
                $slice[$i][$j] = chr(ord($slice[$i][$j]) - $c - $i );
            }
        }
        return implode($slice);
    }

    static function base64URLEncode($data) {
        return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    }

    static function base64URLDecode($data) {
        return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
    }

    static function stringXor($str){
        for ($i = 0; $i < strlen($str); ++$i) {
            $str[$i] = chr(ord($str[$i]) ^ 0x7F);
        }
        return $str;
    }
}

相关文章

网友评论

      本文标题:贴一对php双向加密函数

      本文链接:https://www.haomeiwen.com/subject/llnlkttx.html