基于进制转换的
<?
//made by huyang @2005-01-20||11-04-06
##用n进位制到m进位制
##0~9a-z,最多可理解为36进制范围
print<title>加密解密法</title>;
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<strlen($a);$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<strlen($a);$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<strlen($str);$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<(strlen($str)/4);$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<$k;$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<$len;$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<count($a);$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;
?>
<form method="post" action="carry.php">
<table border="1" cellpadding="0" cellspacing="0" width="800">
<tr>
<td width="9%" height="16"><b>耗费时间/字长-(平均耗时)</b></td>
<td width="91%" height="16"><?echo $cus./.$len.--(.$cus1.);?></td>
</tr>
<tr>
<td width="9%" height="16"><b>原始语句</b></td>
<td width="91%" height="16"><textarea cols="87" rows="8" readonly ><?echo $str;?></textarea></td>
</tr>
<tr>
<td width="9%" height="16"><b>结果</b></td>
<td width="91%" height="16"><textarea cols="87" rows="8" readonly ><?echo $a;?></textarea></td>
</tr>
</table>
<p><textarea rows="8" name="str" cols="87"><?echo $a;?></textarea></p>
<p><input type="submit" value="加密" name="submit">
  <input type="submit" value="解密" name="submit1"></p>
</form>
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


