解密CakePHP 1.2数据

时间:2018-10-17 15:13:21

标签: php cakephp encryption

我有一个基于CakePHP 1.2构建的应用程序,并存储了一些加密数据。我正在重建应用程序,需要解密新应用程序中的数据以更新其上的加密。 Cake7.1 1.2中用于加密数据的密码和方法在PHP 7.1+中不可用。有人知道我可以在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;
    }

}

1 个答案:

答案 0 :(得分:1)

问题中显示的代码似乎是自定义的,即非CakePHP核心代码,因此,这似乎与PHP相关。

不建议使用Mcrypt,但在PHP 7.1中仍然可用,仅从PHP 7.2起才将其删除。 Mcrypt仍然可以与PHP 7.2+一起使用,您只需要手动安装即可,例如it's been moved to PECL,例如,请参见 Issue in installing php7.2-mcrypt 。您还可以使用phpseclib/mcrypt_compat之类的polyfill。因此,您应该能够继续使用Mcrypt进行解密,并将数据移植到所需的任何加密方式。

此外,尽管似乎在空填充方面存在陷阱,但通常也应该可以使用OpenSSL解密数据,例如,参见 Decrypt mcrypt with openssl 。这是一个基本示例:

$data = openssl_decrypt(
    base64_decode($encoded),
    'des-ede3-cbc',
    Configure::read('CakeMix.cryptKey'),
    OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,
    base64_decode($iv)
);

关于用OpenSSL替换Mcrypt的话题很多,您可能需要看一下其他选项。