一个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]='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">
&nbsp&nbsp<input type="submit" value="解密" name="submit1"></p>
</form>

时间: 2024-11-02 19:35:32

一个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; $t

mysql双向加密解密方式用法详解_Mysql

如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大.保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势.幸运的是,MySQL带有很多设计用来提供这 种类型安全的加密函数.本文概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全. 双向加密 就让我们从最简单的加密开始:双向加密.在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密.

MySQL数据库的双向加密方式

双向加密     就让我们从最简单的加密开始:双向加密.在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密.MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE().下面是一个简单的实例:     mysql> INSERT INTO users (username, password)     VALUES ('joe', ENCODE('guessme', 'abracadabra'));     Query OK, 1 row affected

dp-动态规划(DP)算法求出一个问题的所有解

问题描述 动态规划(DP)算法求出一个问题的所有解 具体问题是: 假设有一个楼梯共有N步,你每次可以爬1步或2步.请编写一个函数来计算,有多少种不同的方法可以爬到顶. 此题给出的解如下: int climbStaris(int n){ if(n <= 1) return 1; if(n == 2) return 2; int p = 1, q = 2, curr; for( int i = 3; i <= n; ++i){ curr = p + q; p = q; q = curr; } re

java-用JAVA编写一个文件路径加密程序怎么样编写

问题描述 用JAVA编写一个文件路径加密程序怎么样编写 各位大神,我想问一下 如何编写一个文件加密程序,可以加密文件的路径,求帮助,或者给一点线索. 解决方案 http://www.cnblogs.com/FCWORLD/archive/2012/10/11/2720306.html 解决方案二: http://blog.sina.com.cn/s/blog_6aa9c7380101e29m.html 解决方案三: 做一个如哈希那样的算法来加密怎么样 解决方案四: 用合适的加密算法加密路径不就行

windows 2012中看证书如何双向加密hyper-v 群集复制

安全很重要,如何构建安全也很关键,应用hyper-v虚拟技术给企业带来了很多便利,也带来了一些隐患,众所周知的一个事实是:当数据以明文方式在网络上传输是很不靠谱的.可是hyper-v群集应用中也会出现这个情况,那么如何保护数据呢? 答案是:证书加密(双向验证) Hyper-v中已经给出了选项: 但是有一个情况是,此证书的要求还很特别. 那么如何创建这类证书呢? 1.使用第三方申请(money) 2.使用自签名证书(FREE) 对于企业CA来说这类证书,无法满足制作需求,因为无法满足第二条要求(双

php_screw安装使用教程(另一个PHP代码加密实现)_php实例

开始之前,首先要澄清两个问题:第一,支持开源,不等于反对代码加密:第二,如果把不属于自己的东西(比如公司的)拿去开源,就更加不应该了. 以前知道的,PHP代码的加密都是用Zend的encoder,这东西不但是商业软件,好像还暴出过能够被破解的问题,所以就找到了替代的方案────php_screw,一个日本人开发的东东. php_screw非常小巧,没有仔细看过它的算法,但从说明文档中看,可以自行更改SEED,然后自行编译so和可执行档.如果够牛的话,甚至可以自己去更改算法.不管怎样,对于我们这些

如何用Java进行3DES加密解

原文地址 : http://weavesky.com/2008/01/05/java-3des/ 最近一个合作商提出使用3DES交换数据,本来他们有现成的代码,可惜只有.net版本,我们的服务器都是Linux,而且应用都是Java.于是对照他们提供的代码改了一个Java的版本出来,主要是不熟悉3DES,折腾了一天,终于搞定. 所谓3DES,就是把DES做三次,当然不是简单地DES DES DES就行了,中途有些特定的排列.这个我可不关心,呵呵,我的目的是使用它. 在网上搜索了一下3DES,找到很

推荐一个javascript的加密工具_脚本加解密

一个加密JAVASCRIPT的开源工具PACKER2.0.2 这是一个并非很复杂的编码工具,编码过后可以被浏览器直接识别.新浪在用.比如:http://comment4.news.sina.com.cn/comment/cmnt_xml.js 从这里进入http://dean.edwards.name/packer/,很简单的一个界面. 设置也很简单Numeric (Base 10) :所有的字符都被编码成数字Normal (Base 62) :所有的字符都被编码成字母与数字符号构成的值.这是推