php字符串异或,php加密解密(异或,base64,des)

前几天给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

$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 "
";

第二步: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 "
";

第三步:异或

$len=strlen($str);

$str=base64_decode($str);

$key = substr($str,0,8);

$str=substr($str,8,$len-8);

$tmp="";

for($i=0;$i

$tmp.=substr($str,$i,1) ^ substr($key,$i%8,1);

}

echo $tmp;//为解密后的数据

//归纳函数

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

$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

$tmp.=substr($str,$i,1) ^ substr($key2,$i%8,1);

}

return $tmp;

}

echo my_jiemi($jiami);

?>

分类:

程序积累

/

浏览量:  2522

2014-10-24 17:20 Friday

昵称

邮件地址 (选填)

个人主页 (选填)

评论内容

发表评论

send

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值