前几天给pc端写接口用到数据加密,现在总结下,当时主要做的是对pc端传来的数据进行解密,现在用php模拟下加密以及解密

1.加密
第一步:先进行异或加密,然后在base64加密

function my_jiami($str){

    //随机取8位数
        for($i=0;$i<8;$i++){
            $key.= rand(0,9);
        }
       $tmp="";
       for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key,$i%8,1);
       }
       return base64_encode($key.$tmp);  //异或后进行base64
}

第二步: 进行des加密 //$str 为第一步加密后的字符串

$key = md5('www.xingdong365.com');
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
echo "第二步des加密后:".$str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB, $iv);

第三步:base64在加密$str 为第二步加密后的字符串

echo "第三步base64加密后:".$str =base64_encode($str);

2.解密

第一步:base64解密

echo "第一步 base64解密:".$str= base64_decode($str);
echo "<br>";

第二步:des解密

$key = md5('www.xingdong365.com');
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
echo "第二步 desc解密:".$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB,$iv);
echo "<br>";

第三步:异或

 $len=strlen($str);
 $str=base64_decode($str);
 $key = substr($str,0,8);
 $str=substr($str,8,$len-8);
 $tmp="";
 for($i=0;$i<strlen($str);$i++){
 $tmp.=substr($str,$i,1) ^ substr($key,$i%8,1);
 }
echo $tmp;//为解密后的数据

归纳函数

<?php
header("Content-type:text/html;charset=utf-8");
function my_jiami($str){
//异或 
$key1="";
        for($i=0;$i<8;$i++){
            $key1.= rand(0,9);
        }
        $tmp="";
        for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key1,$i%8,1);
        }
        $str =  base64_encode($key1.$tmp);//异或后进行base64加密
        //des加密
        $key2 = md5('www.xingdong365.com');
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key2, $str, MCRYPT_MODE_ECB, $iv);
        //base64加密
        return $str =base64_encode($str);

    }

    $jiami = my_jiami('flycoder');

    function my_jiemi($str){
    //base64解密
    $str= base64_decode($str);
    //des解密
    $key1 = md5('www.xingdong365.com');
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
        $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key1,$str,MCRYPT_MODE_ECB,$iv);
        //base64解密后异或
        $len=strlen($str);
        $str=base64_decode($str);
        $key2 = substr($str,0,8);
        $str=substr($str,8,$len-8);
        $tmp="";
        for($i=0;$i<strlen($str);$i++){
        $tmp.=substr($str,$i,1) ^ substr($key2,$i%8,1);
        }

       return $tmp;
    }
    echo my_jiemi($jiami);

?>