mcrypt函数适用于旧服务器而不是新服务器

时间:2015-11-30 04:17:11

标签: php encryption

我们有一些遗留需要使用mcrypt解码功能。

  • 旧服务器Ubuntu Linux 10.04.1 working sample。有一个info.php可用
  • 新服务器Debian Linux 8 failing sample。有一个info.php可用

两台服务器上的PHP版本5.6.14-0 + deb8u1。

PHP代码:

<?php

  $salt = '5@Fuv}7F^LkC[k_bx~E^'; // 
  $text = 'Our text decoeded';
  $encout = simple_encrypt($salt, $text);
  echo 'encrypted: ' . $encout .'<br/>';
  echo 'decrypted: ' . simple_decrypt($salt, $encout) ;


  function simple_encrypt($salt, $text) {   
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
  }

  function simple_decrypt($salt, $text)
  {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt,       base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
  }
?>

为什么这两种服务会有所不同?

1 个答案:

答案 0 :(得分:1)

这是因为之前,mcrypt会接受非标准键或iv大小,只需用\ 0填充它们,直到它们的长度正确为止。从5.6开始(您的旧服务器未运行5.6,它似乎运行5.3),正如您在文档中看到的那样,不再接受无效密钥和iv,并且mcrypt_encrypt失败。你的密钥似乎是160位长,它需要是192位(下一个有效密钥长度)。您可以通过将4 \ 0附加到您的密钥来修复它。