PHP 打包/解包错误

发布于 2024-12-11 21:46:23 字数 727 浏览 0 评论 0原文

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

 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

I have to convert an old "encrypted" data to a proper encryption algorithm from an old system. I have this code:

 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";

Why the output shows StackOverflow Is A and not StackOverflow Is AWESOME

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一张白纸 2024-12-18 21:46:23

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

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

因此您要砍掉 8 个字符,留下

U3RhY2tPdmVyZmxvdyBJcyBB

解码为

StackOverflow Is A

base64 encoding expands the size of a string by about 33%. You're passing in the length of the ORIGINAL string, not the base64 encoded one:

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

So you're chopping off 8 characters, leaving you with

U3RhY2tPdmVyZmxvdyBJcyBB

which decodes to

StackOverflow Is A
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文