一个双向加密解密法(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">
       <input type="submit" value="解密" name="submit1"></p>
</form>

时间: 2024-10-27 17:27:44

一个双向加密解密法(php)的相关文章

php的一个简单加密解密代码

 分享一个php加密解密的类,在用户注册的时候发送邮件验证的时候估计会用的到的,代码如下    代码如下: class SysCrypt{  private $crypt_key='http://www.jb51.net';//密钥  public function __construct($crypt_key){   $this->crypt_key=$crypt_key;  }  public function encrypt($txt){   srand((double)microtime

请教一个JS加密解密的问题

问题描述 请教一个JS加密解密的问题 JS代码片段如下: var _0x4158 = ["scrollTop", "he................ function _0x5ba4x1(_0x5ba4x2) { var _0x5ba4x3 = $(window)[_0x4158[0]](); var _0x5ba4x4 = _0x5ba4x3 + $(window)[_0x4158[1]](); var _0x5ba4x5 = $(_0x5ba4x2)[_0x4158[

php 实现一个字符串加密解密的函数实例代码_php实例

php 实现一个字符串加密解密的函数 函数代码如下: /********************************************************************* 函数名称:encrypt 函数作用:加密解密字符串 使用方法: 加密 :encrypt('str','E','nowamagic'); 解密 :encrypt('被加密过的字符串','D','nowamagic'); 参数说明: $string :需要加密解密的字符串 $operation:判断是加密还

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

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

一个可以用来加密/解密的类

加密|解密 可以用来加/解密数据库用户.密码等 using System;using System.IO;using System.Text;using System.Security.Cryptography; namespace Common{ /// <summary> /// SecurityService 的摘要说明. /// </summary> public class SecurityService { static protected Byte[] byteKey

php的一个简单加密解密代码_php技巧

复制代码 代码如下: class SysCrypt{ private $crypt_key='http://www.jb51.net';//密钥 public function __construct($crypt_key){  $this->crypt_key=$crypt_key; } public function encrypt($txt){  srand((double)microtime()*1000000);  $encrypt_key=md5(rand(0,32000));  $

一个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->ch

c#调用des64.dll进行加密解密

加密|解密   [DllImport("des64.dll")]  private static extern void b64_des(StringBuilder in_str, StringBuilder out_str, string key, int lenth, uint option);///第一个参数就是你要进行加密解密的字符串,第二个参数就是要输出的字符串,第三个是指定参数,第四个是字符串长度,最后一个是加密解密参数.0加密 1解密.  [DllImport("

PHP加密解密函数详解_php技巧

分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能.加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand((double)microtime() * 1000000); $encrypt_key=md5(rand(0, 32000)); $ctr=0; $tmp=''; for($i=0;$i<strlen($str);$i++){