频道栏目
首页 > 程序开发 > 综合编程 > 安全编程 > 正文
一个双向加密解密法php
2007-11-22 18:22:50           
收藏   我要投稿


基于进制转换的
加密解密法;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;$jchn[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;$ichn[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;$i160) { $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;$iget($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;?>

耗费时间/字长-(平均耗时) 原始语句 结果


  
点击复制链接 与好友分享!回本站首页
相关TAG标签 加密解密 双向
上一篇:浅谈inc文件的安全性问题
下一篇:编写PHP的安全策略
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站