解密 CakePHP 1.2 数据
解密 CakePHP 1.2 数据
我有一个基于CakePHP 1.2构建的应用程序,并存储了一些加密数据。我正在重建该应用程序,并需要在新应用程序中解密数据以更新其加密方式。在PHP 7.1+环境中,CakePHP 1.2中用于加密数据的密码和方法不可用。有人知道我是否可以在PHP 7.1+环境中解密数据,以便可以使用更新的技术进行加密吗?
当前加密/解密数据的方法:
function _cryptData(&$data, $direction) { $ivSize = mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CBC); switch ($direction) { case 'encrypt': $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $data = base64_encode($iv) . '|' . base64_encode(mcrypt_encrypt(MCRYPT_TRIPLEDES, Configure::read('CakeMix.cryptKey'), $data, MCRYPT_MODE_CBC, $iv)); break; case 'decrypt': list($iv, $encoded) = explode('|', $data); $data = mcrypt_decrypt(MCRYPT_TRIPLEDES, Configure::read('CakeMix.cryptKey'), base64_decode($encoded), MCRYPT_MODE_CBC, base64_decode($iv)); break; } }
CakePHP 1.2是一个PHP框架,而Mcrypt是一种用于数据加密和解密的PHP库。然而,Mcrypt在PHP 7.2版本中被废弃,因此在该版本之后无法直接使用。然而,在PHP 7.2+版本中,仍然可以手动安装Mcrypt,并继续使用它进行解密。此外,也可以使用OpenSSL库来解密数据。
要使用Mcrypt进行解密,可以使用以下代码示例:
$data = openssl_decrypt( base64_decode($encoded), 'des-ede3-cbc', Configure::read('CakeMix.cryptKey'), OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, base64_decode($iv) );
上述代码将使用Mcrypt解密通过base64编码的数据。需要注意的是,可能需要在解密过程中处理空字节填充的问题。
如果不想使用Mcrypt,还可以考虑使用OpenSSL进行解密。有关如何使用OpenSSL进行解密的更多信息,可以参考相关的文档和资源。
总结起来,CakePHP 1.2在PHP 7.2+版本中使用Mcrypt进行数据解密时会遇到问题,因为Mcrypt被废弃。解决方法之一是手动安装Mcrypt,并继续使用它进行解密。另一种解决方法是使用OpenSSL库进行解密。以上提供了使用OpenSSL解密的示例代码,同时也提到了可能遇到的空字节填充问题。