«

PHP对传递的字符串变量进行加密与解密的方法

时间:2024-3-3 10:43     作者:韩俊     分类: PHP


关于博客留言列表里直接显示了用户邮箱的BUG,利用了一点时间,再百度上找到了一个PHP对字符串变量加密与解密的方法,直接整理一下拿过来用了,测试可行,至于后期稳定性和安全性如何,慢慢体验再说。顺手整理了一下,分享给大家!

具体的代码:

/*
*功能:对字符串进行加密处理
*参数一:需要加密的内容
*参数二:密钥
*/

$key_mi='123456';  //自己设置的密钥

function passport_encrypt($str,$key){ //加密函数
    srand((double)microtime() * 1000000);
    $encrypt_key=md5(rand(0, 32000));
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
    }
    return base64_encode(passport_key($tmp,$key));
}

/*
*功能:对字符串进行解密处理
*参数一:需要解密的密文
*参数二:密钥
*/
function passport_decrypt($str,$key){ //解密函数
    $str=passport_key(base64_decode($str),$key);
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $md5=$str[$i];
        $tmp.=$str[++$i] ^ $md5;
    }
    return $tmp;
}
 
 
/*
*辅助函数
*/
function passport_key($str,$encrypt_key){
    $encrypt_key=md5($encrypt_key);
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$str[$i] ^ $encrypt_key[$ctr++];
    }
    return $tmp;
}

//调用方法(加密):
//passport_encrypt(需加密的字符串,$key_mi);

//调用方法(解密):
//passport_decrypt(需解密的字符串,$key_mi);

实际使用示例:

$a='mdaima';
echo "原字符串:".$a."</br>";
$jiami=passport_encrypt($a,$key_mi);
echo "加密后字符串:".$jiami."</br>";
echo "解密后字符串:".passport_decrypt($jiami,$key_mi)."</br>";

输出结果:

原字符串:maopiaopiao
加密后字符串:VG1TZgFnUjEGZlAy
解密后字符串:maopiaopiao

说明:因加入了时间戳函数,所以加密后的字符串是动态发生变化的。

标签: php php教程

热门推荐