仓酷云 发表于 2015-2-4 00:31:12

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">
   &nbsp&nbsp<input type="submit" value="解密" name="submit1"></p>
</form>
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。

谁可相欹 发表于 2015-2-4 13:17:14

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

变相怪杰 发表于 2015-2-4 13:33:37

有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。

金色的骷髅 发表于 2015-2-21 20:49:29

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

活着的死人 发表于 2015-2-22 11:31:53

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

海妖 发表于 2015-3-1 17:25:52

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

admin 发表于 2015-3-1 21:38:40

当然这种网站的会员费就几十块钱。

仓酷云 发表于 2015-3-2 15:09:31

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

分手快乐 发表于 2015-3-7 13:10:32

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

爱飞 发表于 2015-3-15 06:31:53

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

因胸联盟 发表于 2015-3-17 16:11:23

本文当是我的笔记啦,遇到的问题随时填充

兰色精灵 发表于 2015-3-17 19:09:43

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

莫相离 发表于 2015-3-24 20:57:44

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

再现理想 发表于 2015-4-1 08:10:10

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

小妖女 发表于 2015-4-24 11:34:21

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

灵魂腐蚀 发表于 2015-5-4 19:21:20

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

透明 发表于 2015-5-8 15:36:42

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

飘灵儿 发表于 2015-6-4 12:30:37

我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。

小魔女 发表于 2015-6-5 13:58:24

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
页: [1]
查看完整版本: PHP网页设计一个双向加密解密法(php)