PHP打包/解包错误

时间:2011-10-26 14:30:22

标签: php pack

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

 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='StackOverflow Is AWESOME';
  $l=strlen($string);

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


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

为什么输出会显示StackOverflow Is A而非StackOverflow Is AWESOME

1 个答案:

答案 0 :(得分:12)

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

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

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

U3RhY2tPdmVyZmxvdyBJcyBB

解码为

StackOverflow Is A