3

我必须将旧的“加密”数据从旧系统转换为适当的加密算法。我有这个代码:

 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

4

1 回答 1

12

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

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

所以你砍掉了 8 个字符,只剩下

U3RhY2tPdmVyZmxvdyBJcyBB

解码为

StackOverflow Is A
于 2011-10-26T14:33:38.500 回答