PHP打包/解包错误

我必须将旧的“加密”数据转换为旧系统的正确加密算法.我有这个代码:

 function unpackString($s,$l){
      $tmp=unpack('c'.$l,$s);
      $return=NULL;
      foreach($tmp as $v){
          if($v>0){
              $return.=chr($v);
          }
      }
      return $return;
  }
  function packString($s,$l){
      $return=NULL;
      for($i=0;$i<$l;$i++){
          $return.=pack('c',ord(substr($s,$i,1)));
      }
      return $return;
  }

  $string='* Is AWESOME';
  $l=strlen($string);

  $encoded=packString(base64_encode($string),$l);
  $decoded=base64_decode(unpackString($encoded,$l));


  echo "\n".$decoded."\n";

为什么输出显示*是A而不是*很棒

解决方法:

base64编码将字符串的大小扩展了大约33%.你传递的是ORIGINAL字符串的长度,而不是base64编码的字符串:

* Is AWESOME  - 24 chars plaintext
U3RhY2tPdmVyZmxvdyBJcyBBV0VTT01F - 32 chars base64 encoded

所以你要砍掉8个字符,留下你

U3RhY2tPdmVyZmxvdyBJcyBB

它解码为

* Is A
上一篇:需要帮助“打包”for perl和php


下一篇:新的SKY PACK怎么使用?天空特效制作方法!