PHP网页设计一个双向加密解密法(php)
到现在,对排版还是不很熟练,经常会排不好。加密|解密 基于进制转换的<?
//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';
$this->cn='1';
$this->cn='2';
$this->cn='3';
$this->cn='4';
$this->cn='5';
$this->cn='6';
$this->cn='7';
$this->cn='8';
$this->cn='9';
$this->cn='A';
$this->cn='B';
$this->cn='C';
$this->cn='D';
$this->cn='E';
$this->cn='F';
$this->cn='G';
$this->cn='H';
$this->cn='I';
$this->cn='J';
$this->cn='K';
$this->cn='L';
$this->cn='M';
$this->cn='N';
$this->cn='O';
$this->cn='P';
$this->cn='Q';
$this->cn='R';
$this->cn='S';
$this->cn='T';
$this->cn='U';
$this->cn='V';
$this->cn='W';
$this->cn='X';
$this->cn='Y';
$this->cn='Z';
}
function check1($a)
{
if(ereg("",$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>=$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*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("",$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=$i;
}
for($i=36;$i<62;$i++)
{
$this->hu1[$i]=chr($i+61);
$this->hu2=$i;
}
$this->hu1=chr(42);
$this->hu1=chr(43);
$this->hu2=62;
$this->hu2=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;
$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;
$st2=$st;
$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;
$stb=$st;
$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>
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 当然这种网站的会员费就几十块钱。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 本文当是我的笔记啦,遇到的问题随时填充 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
页:
[1]