什么可能导致PHP mcrypt破坏数据?

时间:2011-08-26 20:16:19

标签: php encryption mcrypt tripledes

我正在使用mcrypt函数使用TripleDES加密文本块。 90%的时间它应该工作,我可以解密就好了。另外10%虽然我根本无法解密 - 好像我有错误的密钥或数据被破坏。

功能如下:

function enc($text, $key, $iv) {
  $text_num = str_split($text, 8);
  $text_num = 8 - strlen($text_num[count($text_num)-1]);

  for ($i=0; $i < $text_num; $i++) {
    $text = $text . chr($text_num);
  }

  $cipher = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'cbc', '');
  mcrypt_generic_init($cipher, $key, $iv);
  $decrypted = mcrypt_generic($cipher, $text);
  mcrypt_generic_deinit($cipher);
  return base64_encode($decrypted);
}

他们的关键&amp; IV是正确的长度(分别为24/8)并且永远不会改变。就像我说的,它在所有内容上运行 exact 相同的代码,但只有10%以这种方式失败。

我可以在$text中传递任何导致此问题的内容吗?它不喜欢某些字符集吗?或者这可能是由于内存不足/某些其他服务器状况而发生的?

任何帮助固定这一点将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

(复制自评论)3DE​​S有64位块大小(8字节)。您需要查看明文的确切大小,以便根据块数进行检查。请查看文档中提到的填充,可能是PKCS5或可能是PKCS7。您的“10%”失败实际上是12.5%失败(8分之1)?这往往会指向与阻止有关的事情。