php 双向加密解密,一个php双向加密解密法

基于进制转换的

//made by huyang @2005-01-20||11-04-06

##用n进位制到m进位制

##0~9A-Z,最多可理解为36进制范围

print'

加密解密法';

class carry

{

function carry($n,$m)

{

$this->n=$n;

$this->m=$m;

$this->chn['0']=0;

$this->chn['1']=1;

$this->chn['2']=2;

$this->chn['3']=3;

$this->chn['4']=4;

$this->chn['5']=5;

$this->chn['6']=6;

$this->chn['7']=7;

$this->chn['8']=8;

$this->chn['9']=9;

$this->chn['A']=10;

$this->chn['B']=11;

$this->chn['C']=12;

$this->chn['D']=13;

$this->chn['E']=14;

$this->chn['F']=15;

$this->chn['G']=16;

$this->chn['H']=17;

$this->chn['I']=18;

$this->chn['J']=19;

$this->chn['K']=20;

$this->chn['L']=21;

$this->chn['M']=22;

$this->chn['N']=23;

$this->chn['O']=24;

$this->chn['P']=25;

$this->chn['Q']=26;

$this->chn['R']=27;

$this->chn['S']=28;

$this->chn['T']=29;

$this->chn['U']=30;

$this->chn['V']=31;

$this->chn['W']=32;

$this->chn['X']=33;

$this->chn['Y']=34;

$this->chn['Z']=35;

$this->cn[0]='0';

$this->cn[1]='1';

$this->cn[2]='2';

$this->cn[3]='3';

$this->cn[4]='4';

$this->cn[5]='5';

$this->cn[6]='6';

$this->cn[7]='7';

$this->cn[8]='8';

$this->cn[9]='9';

$this->cn[10]='A';

$this->cn[11]='B';

$this->cn[12]='C';

$this->cn[13]='D';

$this->cn[14]='E';

$this->cn[15]='F';

$this->cn[16]='G';

$this->cn[17]='H';

$this->cn[18]='I';

$this->cn[19]='J';

$this->cn[20]='K';

$this->cn[21]='L';

$this->cn[22]='M';

$this->cn[23]='N';

$this->cn[24]='O';

$this->cn[25]='P';

$this->cn[26]='Q';

$this->cn[27]='R';

$this->cn[28]='S';

$this->cn[29]='T';

$this->cn[30]='U';

$this->cn[31]='V';

$this->cn[32]='W';

$this->cn[33]='X';

$this->cn[34]='Y';

$this->cn[35]='Z';

}

function check1($a)

{

if(ereg("[0-9]",$a))

if($a>=2)

if($a<=36)

return true;

return false;

}

function check2($a)

{

$la=0;

for($j=0;$j

{

if($this->chn[substr($a,$j,1)]>=$this->n)

$la=1;

if($la)

break;

}

if($la)

return false;

else

return true;

}

function toDEC($a)//$n->十进制

{

if($this->n==10)

return $a;

else

{

$a=strrev($a);

$k=0;

for($i=0;$i

{

$k+=$this->chn[substr($a,$i,1)]*pow($this->n,$i);

}

return $k;

}

}

function gethigh($a)

{

if($a<=1)

return 1;

else

{

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

{

if(pow($this->m,$i)>$a)

break;

}

return $i;

}

}

function toM($a)//十进制->$m

{

$a1=$this->gethigh($a);

$res="";

for($i=1;$i<=$a1;$i++)

{

$u=($a-$a%pow($this->m,($a1-$i)))/(pow($this->m,($a1-$i)));

$a-=$u*pow($this->m,($a1-$i));

$res.=$this->cn[$u];

}

return $res;

}

function get($a)

{

if(!$this->n)$this->n=10;

if(!$this->m)$this->m=10;

if(($this->check1($this->n))&&($this->check1($this->m)))

{

if(ereg("[0-9A-Z]",$a))

{

if($this->check2($a))

{

return $this->toM($this->toDEC($a));

}

else

return false;

}

else

return false;

}

else

return false;

}

}

class han

{

function han()

{

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

{

$this->hu1[$i]=$i;

$this->hu2[$i]=$i;

}

for($i=10;$i<36;$i++)

{

$this->hu1[$i]=chr($i+55);

$this->hu2[chr($i+55)]=$i;

}

for($i=36;$i<62;$i++)

{

$this->hu1[$i]=chr($i+61);

$this->hu2[chr($i+61)]=$i;

}

$this->hu1[62]=chr(42);

$this->hu1[63]=chr(43);

$this->hu2[chr(42)]=62;

$this->hu2[chr(43)]=63;

}

function tocode($str)//将一组字符转变成为代码0~65536

{

$huyang1=new carry(10,33);

$j=0;

for($i=0;$i

{

$p=ord(substr($str,$i,1));

if($p>160)

{

$q=ord(substr($str,++$i,1));

$p=$p*256+$q;

}

else

$p=255*256+$p;

$ret.=$huyang1->get($p);

$j++;

}

return $ret;

}

function getcode($str)

{

$huyang=new carry(33,10);

$res="";

for($i=0;$i

{

$a=$huyang->get(substr($str,($i*4),4));

$a2=$a%256;

$a1=($a-$a2)/256;

if($a1==255)

$res.=chr($a2);

else

$res.=chr($a1).chr($a2);

}

return $res;

}

function encode($str)

{

$res="";

$huyang=new carry(35,7);

$huyang1=new carry(8,10);

$str1=$this->tocode($str);

$k=ceil(strlen($str1)/3);

for($i=0;$i

{

$word=$this->hu1[rand(0,61)];

$res1=$huyang1->get($huyang->get(substr($str1,($i*3),3)));

$res11=($res1-$res1%(64*64))/(64*64);

$res1-=$res11*64*64;

$res12=($res1-$res1%64)/64;

$res1-=$res12*64;

$res13=$res1;

if($i==($k-1))

{

if($res11!=0)

{

$res.=$this->hu1[$res11].$this->hu1[$res12].$this->hu1[$res13].$word;

}

elseif($res12!=0)

{

$res.=$this->hu1[$res12].$this->hu1[$res13].$word;

}

elseif($res13!=0)

{

$res.=$this->hu1[$res13].$word;

}

}

else

$res.=$this->hu1[$res11].$this->hu1[$res12].$this->hu1[$res13].$word;

}

return trim($res);

}

function discode($str)

{

$len=ceil(strlen($str)/4);

$res="";

$a=strlen($str)-4*($len-1);

for($i=0;$i

{

if($i!=($len-1))

{

$res1=substr($str,$i*4,1);

$res2=substr($str,($i*4+1),1);

$res3=substr($str,($i*4+2),1);

$res11=$this->hu2[$res1];

$res12=$this->hu2[$res2];

$res13=$this->hu2[$res3];

$res14=$res11*64*64+$res12*64+$res13;

$res.=" ".$res14;

}

else

{

if($a%4==0)

{

$res1=substr($str,$i*4,1);

$res2=substr($str,($i*4+1),1);

$res3=substr($str,($i*4+2),1);

$res11=$this->hu2[$res1];

$res12=$this->hu2[$res2];

$res13=$this->hu2[$res3];

$res14=$res11*64*64+$res12*64+$res13;

$res.=" ".$res14;

}

elseif($a%4==2)

{

$res1=substr($str,$i*4,1);

$res11=$this->hu2[$res1];

$res14=$res11;

$res.=" ".$res14;

}

elseif($a%4==3)

{

$res1=substr($str,$i*4,1);

$res2=substr($str,($i*4+1),1);

$res11=$this->hu2[$res1];

$res12=$this->hu2[$res2];

$res14=$res11*64+$res12;

$res.=" ".$res14;

}

}

}

return trim($res);

}

function decode($str)

{

$str=$this->discode($str);

$a=explode(" ",$str);

$res="";

$huyang=new carry(7,35);

$huyang1=new carry(10,8);

for($i=0;$i

{

//$res.=$huyang->get($a[$i]);

if($i==(count($a)-1))

$res.=$huyang->get($huyang1->get($a[$i]));

else

{

$b=$huyang->get($huyang1->get($a[$i]));

if(strlen($b)==0)

$res.="000";

elseif(strlen($b)==1)

$res.="00".$b;

elseif(strlen($b)==2)

$res.="0".$b;

else

$res.=$b;

}

}

return $this->getcode($res);

}

}

$s=microtime();

$st=explode(' ',$s);

$st1=$st[0];

$st2=$st[1];

$huyang=new han;

$str=$_POST['str'];

if(!$str)$str="请输入查询语句!!";

$len=strlen($str);

if($submit)

$a=$huyang->encode($str);

if($submit1)

$a=$huyang->decode($str);

$a=str_replace("\\","\",$a);

$a=str_replace("\\"","\"",$a);

$a=str_replace("\\'","\'",$a);

$s=microtime();

$st=explode(' ',$s);

$sta=$st[0];

$stb=$st[1];

$ss1=$sta-$st1;

$ss2=$stb-$st2;

$cus=$ss1+$ss2;

$cus1=$cus/$len;

?>

耗费时间/字长-(平均耗时)<?echo $cus.'/'.$len.'--('.$cus1.')';?>
原始语句<?echo $str;?>
结果<?echo $a;?>

&nbsp&nbsp

(编辑:)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值