例如:http://www.baidu.com/s?wd=%D6%D0%B9%FA%C8%CB其中:%D6%D0%B9%FA%C8%CB 是“中国人” urlencode得到的
现在要实现的算法是如何在url参数当中传递汉字+英文混合参数的时间加密并达到最短的算法。
当然不用urlencode加密也是可以的,关键是如何得到最短的加密参数。

解决方案 »

  1.   

    好的,谢谢楼上几位的支持我再描述一下,我就是想传递中英文参数的时候加密并达到加密参数最短的功能例如:
    http://www.xxx.com/index.php?p=中国人abc123 我想把"中国人abc123"加密并达到加密后的参数(长度)要短一些,当然如果没有办法变短,只要能加密也行然后在index.php代码当中解密这个加密的参数然后进行处理。
     
      

  2.   

    p是用户名么?直接cookie里设置不行么?
    或者干脆用UID。
      

  3.   

    你可以看看disuz的cookie加密算法,是可逆的
      

  4.   


    a.php
    <?php
     require_once("en.php");
     $keys = "1234567890abcdefghjk@#$%^&*()!"; //密匙
     $cr64 = new AzDGCrypt($keys);
     $words="中国人abc123";
     $en_word = $cr64->crypt($words);
     echo "加密变量 = ".$en_word."<br>"; echo '<a href="b.php?action='.$en_word.'">连接</a>';
    ?>
      

  5.   


    b.php
    <?php
     require_once("en.php");
     $keys = "1234567890abcdefghjk@#$%^&*()!"; //密匙
     $cr64 = new AzDGCrypt($keys);
     $de_word = $cr64->decrypt($_REQUEST['action']);
     echo "解密原变量 = ".$de_word."<br>";
      
    ?>
      

  6.   


    en.php
    <?php
    class AzDGCrypt{
       var $k;
       function AzDGCrypt($m){
          $this->k = $m;
       }
       function ed($t) { 
          $r = md5($this->k); 
          $c=0; 
          $v = ""; 
          for ($i=0;$i<strlen($t);$i++) { 
             if ($c==strlen($r)) $c=0; 
             $v.= substr($t,$i,1) ^ substr($r,$c,1); 
             $c++; 
          } 
          return $v; 
       } 
       function crypt($t){ 
          srand((double)microtime()*1000000); 
          $r = md5(rand(0,32000)); 
          $c=0; 
          $v = ""; 
          for ($i=0;$i<strlen($t);$i++){ 
             if ($c==strlen($r)) $c=0; 
             $v.= substr($r,$c,1) . 
                 (substr($t,$i,1) ^ substr($r,$c,1)); 
             $c++; 
          } 
          return base64_encode($this->ed($v)); 
       } 
       function decrypt($t) { 
          $t = $this->ed(base64_decode($t)); 
          $v = ""; 
          for ($i=0;$i<strlen($t);$i++){ 
             $md5 = substr($t,$i,1); 
             $i++; 
             $v.= (substr($t,$i,1) ^ $md5); 
          } 
          return $v; 
       } 
    }
    ?>