前几天给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);
?>
已有 0 条评论