mcrypt(Blowfish)在PHP4.4.4和PHP5.3.3之间的差异

时间:2016-10-26 05:21:12

标签: php encryption

我们的客户基于PHP4.4.4(mcrypt 2.2.x)实现了遗留系统 他们正考虑将其升级到PHP5.3.3(mcrypt 2.5.8) 下面的代码在PHP4.4.4中显示了my_data的结果。

$my_data = "xfZ3ruQZ+Is=";  
   // the string of "xfZ3ruQZ+Is=" is generated by
   // base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,"my_key","my_data",MCRYPT_ENCRYPT)) 
   // in PHP4.4.4
$my_key = "my_key";
$my_data = base64_decode($my_data);
$c_data = mcrypt_ecb(MCRYPT_BLOWFISH,$my_key,$my_data,MCRYPT_DECRYPT);
echo $c_data;

另一方面,相同的代码在PHP5.3.3(mcrypt 2.5.8)中显示"Dz}「ツ鞅"(不同字符串)的结果。

似乎PHP4.4.4中的加密数据无法在PHP5.3.3中解密。

(此类数据可以存储在数据库中。)

有没有办法解密PHP5.3.3中的加密字符串data("xfZ3ruQZ+Is=")

我知道mcrypt_ecb的功能已被弃用。

但是有太多的加密数据在Oracle数据库的PHP4.4.4中被mcrypt_ecb(BLOWFISH)功能加密了。
我们的客户要求这些数据应在PHP5.3.3上解密,引用旧数据库而不进行数据操作。

任何想法都会有所帮助。 感谢

2 个答案:

答案 0 :(得分:0)

根据下面的错误报告,有MCRYPT_BLOWFISH_COMPAT模式。

它工作并修复了它。

https://bugs.php.net/bug.php?id=18267

mcrypt_ecb(MCRYPT_BLOWFISH_COMPAT,$my_key,$my_data,MCRYPT_DECRYPT);

答案 1 :(得分:0)

不应使用

mcrypt_ecb。 应该使用mcrypt_decrypt

mcrypt_decrypt(MCRYPT_BLOWFISH_COMPAT, $my_key, $my_data, MCRYPT_MODE_ECB);