提问者:小点点

解密CakePHP 1.2数据


我有一个基于CakePHP1.2构建的应用程序,它存储了一些加密数据。我正在重建应用程序,需要解密新应用程序中的数据以更新其加密。CakePHP1.2中用于加密数据的密码和方法在PHP7.1中不可用。有人知道我可以在PHP7.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个答案

匿名用户

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

Mcrypt已被弃用,但在PHP7.1中仍然可用,它仅在PHP7.2中被删除。Mcrypt还可以与php7.2一起使用,您只需手动安装它,因为它已被移动到PECL,请参阅安装php7中的示例问题。2-mcrypt。您还可以使用phpseclib/mcrypt_compat之类的多填料。因此,您应该能够继续使用Mcrypt进行解密,并将数据移植到您喜欢的任何加密。

此外,通常也可以使用OpenSSL对数据进行解密,尽管空填充似乎存在缺陷,例如请参见使用OpenSSL解密mcrypt。以下是一个基本示例:

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

有很多关于用OpenSSL替换MCrypt的主题,您可能想了解更多选项。