Расшифровка данных CakePHP 1.2 - PullRequest
0 голосов
/ 17 октября 2018

У меня есть приложение, которое было построено на 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;
    }

}

1 Ответ

0 голосов
/ 17 октября 2018

Показанный код в вашем вопросе кажется нестандартным, то есть не основным кодом CakePHP, так что это больше похоже на PHP.

Mcrypt устарел, но все еще доступен в PHP 7.1, он был толькоудалено с PHP 7.2.Mcrypt также можно использовать с PHP 7.2+, вам просто нужно установить его вручную, так как перенесено в PECL , см., Например, Проблемав установке php7.2-mcrypt .Вы также можете использовать полифилл как phpseclib / mcrypt_compat .Таким образом, вы должны иметь возможность продолжать использовать Mcrypt для расшифровки и переносить данные на любое шифрование, которое вам нравится.

Кроме того, как правило, должна быть также возможность дешифрования данных с использованием OpenSSL, хотя, похоже, существуют ошибки, связанные с нулемзаполнение, см. например Расшифруйте mcrypt с помощью openssl .Вот базовый пример:

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

Существует довольно много тем о замене Mcrypt на OpenSSL, которые вы, возможно, захотите посмотреть для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...