解密 CakePHP 1.2 数据

Posted

技术标签:

【中文标题】解密 CakePHP 1.2 数据【英文标题】:Decrypting CakePHP 1.2 data 【发布时间】:2019-03-22 07:54:54 【问题描述】:

我有一个基于 Cakephp 1.2 构建的应用程序,并存储了一些加密数据。我正在重建应用程序,需要解密新应用程序中的数据以更新其加密。在 CakePHP 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;
    


【问题讨论】:

本地网络服务器,将PHP设置为您需要的版本,解密数据..?你是在 Cake 3 中重建它吗?使用解密的数据并通过新构建的应用程序进行加密..?可能不是有人会提供的最整洁的解决方案 您可能希望更具体地了解您所指的加密方法。 IIRC CakePHP 1.2 没有附带任何 PHP 原生的加密功能,我认为它只附带了一些非常基本的 XOR 密码实现。 老实说,我继承了当前 CakePHP 1.2 形式的应用程序,并在 Laravel (5.7) 中重建它。我不确定它使用了什么加密方法,我将在问题的编辑中添加用于处理数据的方法。我想过改变我的本地 PHP 版本并这样做,但 Laravel 5.7 需要 PHP > 7.1.3,所以我不得不降级应用程序。 【参考方案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 的主题,您可能想查看更多选项。

【讨论】:

感谢您的回复。我没有意识到 Mcrypt 仍然可用,并且在 PECL 中也可用。无论如何,您的openssl_decrypt 代码有效。我实际上尝试过与此类似的方法,但不知道“方法”或“选项”该使用什么。您的回答帮了大忙。

以上是关于解密 CakePHP 1.2 数据的主要内容,如果未能解决你的问题,请参考以下文章

CAKEPHP 1.2/1.3 中的前缀路由和插件

CakePHP 1.2 应用程序具有非常规的 Cake 路径抛出错误

CakePHP 应用程序无法在 localhost 中启动

cakephp 多个数据库中的关联 Cakephp 2

CakePHP 3 - 自定义数据源在哪里?

Cakephp 3.7 hasOne字段数据不保存