我们的客户基于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上解密,引用旧数据库而不进行数据操作。
任何想法都会有所帮助。 感谢
答案 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);