加密解密 获取昨天、今天、明天 身份证中间数字变星号 日期补0 计算数据是否已过期逻辑 数组根据相同值再分组 判断是否为微信端打开 判断是否为移动端 随机数:字母 过滤符号、过滤词组 根据身份证号计算年龄、性别 根据指定个数,为数组分组 防止上传超时 linux使用include报failed to open stream: No such file or directory错误 常用数组操作 常用字符串操作 常用数学操作 将网络图片保存到本地

加密解密

首页 > PHP > 原生PHP 更新日期:2021-07-16 10:32:07

tp6不像laravel,内置了加密解密,需要自己写。

这样也好,规则可以自己设。

第一种加密方式

# 使用这个函数加密,加密 $key为秘钥
function jiami($txt, $key = 'www.tyzmc.cn') {   
    srand((double)microtime() * 1000000);   
    $encrypt_key = md5(rand(0, 88888));   
    $ctr = 0;   
    $tmp = '';   
    for($i = 0;$i < strlen($txt); $i++) {   
    $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   
    $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);   
    }   
    return urlencode(base64_encode(passport_key($tmp, $key)));   
}  
 
# 解密 $key为秘钥
function passport_key($txt, $encrypt_key) {   
    $encrypt_key = md5($encrypt_key);   
    $ctr = 0;   
    $tmp = '';   
    for($i = 0; $i < strlen($txt); $i++) {   
    $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   
    $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];   
    }   
    return $tmp;   
}
# 使用这个函数解密,$txt为要解密的值,$key为预设的秘钥
function jiemi($txt, $key = '') {   
    $txt = passport_key(base64_decode(urldecode($txt)), $key);   
    $tmp = '';   
    for($i = 0;$i < strlen($txt); $i++) {   
    $md5 = $txt[$i];   
    $tmp .= $txt[++$i] ^ $md5;   
    }   
    return $tmp;   
}

第二种加密方式

function jiami2($txt, $key='xxxxx'){ 
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 
    $nh = rand(0,61); 
    $ch = $chars[$nh]; 
    $mdKey = md5($key.$ch); 
    $mdKey = substr($mdKey,$nh%8, $nh%8+7); 
    $txt = base64_encode($txt); 
    $tmp = ''; 
    $i=0;$j=0;$k = 0; 
    for ($i=0; $i<strlen($txt); $i++) { 
        $k = $k == strlen($mdKey) ? 0 : $k; 
        $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%61; 
        $tmp .= $chars[$j]; 
    } 
    return urlencode($ch.$tmp); 
}
function jiemi2($txt, $key='xxxxx'){ 
    $txt = urldecode($txt); 
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 
    $ch = $txt[0]; 
    $nh = strpos($chars,$ch); 
    $mdKey = md5($key.$ch); 
    $mdKey = substr($mdKey,$nh%8, $nh%8+7); 
    $txt = substr($txt,1); 
    $tmp = ''; 
    $i=0;$j=0; $k = 0; 
    for ($i=0; $i<strlen($txt); $i++) { 
        $k = $k == strlen($mdKey) ? 0 : $k; 
        $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]); 
        while ($j<0) $j+=61; 
        $tmp .= $chars[$j]; 
    } 
    return base64_decode($tmp);
} 

第二种方式有个BUG,就是解密的数据,会自带一个奇怪的符号。该符号并不会在html中显示,但如果解密结果是用来当做主键查询数据库的,就会出现查不到的情况。如果解密数据为纯数字,可考虑使用intval()转一下。

标题导航