我们有一些遗留需要使用mcrypt解码功能。
两台服务器上的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)));
}
?>
为什么这两种服务会有所不同?
答案 0 :(得分:1)
这是因为之前,mcrypt会接受非标准键或iv大小,只需用\ 0填充它们,直到它们的长度正确为止。从5.6开始(您的旧服务器未运行5.6,它似乎运行5.3),正如您在文档中看到的那样,不再接受无效密钥和iv,并且mcrypt_encrypt失败。你的密钥似乎是160位长,它需要是192位(下一个有效密钥长度)。您可以通过将4 \ 0附加到您的密钥来修复它。