带密匙的php加密解密示例分享
带密匙的php加密解密示例分享
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:

复制代码 代码如下:

<?php

$id = "http://www.jb51.net";

$token = encrypt($id, 'E', 'jb51');

echo '加密:'.encrypt($id, 'E', 'jb51');

echo '<br />';

echo '解密:'.encrypt($token, 'D', 'jb51');

/*********************************************************************

函数名称:encrypt

函数作用:加密解密字符串

使用方法:

加密 :encrypt('str','E','qingdou');

解密 :encrypt('被加密过的字符串','D','qingdou');

参数说明:

$string :需要加密解密的字符串

$operation:判断是加密还是解密:E:加密 D:解密

$key :加密的钥匙(密匙);

*********************************************************************/

function encrypt($string,$operation,$key='')

{

$src = array("/","+","=");

$dist = array("_a","_b","_c");

if($operation=='D'){$string = str_replace($dist,$src,$string);}

$key=md5($key);

$key_length=strlen($key);

$string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;

$string_length=strlen($string);

$rndkey=$box=array();

$result='';

for($i=0;$i<=255;$i++)

{

$rndkey[$i]=ord($key[$i%$key_length]);

$box[$i]=$i;

}

for($j=$i=0;$i<256;$i++)

{

$j=($j+$box[$i]+$rndkey[$i])%256;

$tmp=$box[$i];

$box[$i]=$box[$j];

$box[$j]=$tmp;

}

for($a=$j=$i=0;$i<$string_length;$i++)

{

$a=($a+1)%256;

$j=($j+$box[$a])%256;

$tmp=$box[$a];

$box[$a]=$box[$j];

$box[$j]=$tmp;

$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));

}

if($operation=='D')

{

if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8))

{

return substr($result,8);

}

else

{

return'';

}

}

else

{

$rdate = str_replace('=','',base64_encode($result));

$rdate = str_replace($src,$dist,$rdate);

return $rdate;

}

}

?>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新php教程学习
热门php教程学习
编程开发子分类