PHP 7.4 прямая замена для расшифровки mcrypt - PullRequest
0 голосов
/ 04 августа 2020

У меня есть устаревшая база данных с контентом, который был зашифрован с помощью mcrypt с использованием DES (да, я знаю, это было давно go). Метод шифрования такой:

/**
 * General encryption routine for generating a reversible ciphertext
 * @param String $string the plain text to encrypt
 * @param String $key the encryption key to use
 * @return String the cypher text result
 */
function encrypt($string, $key)
{
    srand((double) microtime() * 1000000);
    /* Open module, and create IV */
    $td = mcrypt_module_open('des', '', 'cfb', '');
    $ksub = substr(md5($key), 0, mcrypt_enc_get_key_size($td));
    $iv_size = mcrypt_enc_get_iv_size($td);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    /* Initialize encryption handle */
    if (mcrypt_generic_init($td, $ksub, $iv) != -1)
    {
        /* Encrypt data */
        $ctxt = mcrypt_generic($td, $string);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $ctxt = $iv . $ctxt;
        return base64_encode($ctxt);
    } //end if
}

и метод дешифрования выглядит следующим образом:

/**
 * General decryption routine for recovering a plaintext
 * @param String $string the cypher text to decrypt
 * @param String $key the encryption key to use
 * @return String the plain text result
 */
function decrypt($string, $key)
{
    $ptxt = base64_decode($string);
    /* Open module, and create IV */
    $td = mcrypt_module_open('des', '', 'cfb', '');
    $ksub = substr(md5($key), 0, mcrypt_enc_get_key_size($td));
    $iv_size = mcrypt_enc_get_iv_size($td);
    $iv = substr($ptxt, 0, $iv_size);
    $ptxtsub = substr($ptxt, $iv_size);
    /* Initialize encryption handle */
    if (mcrypt_generic_init($td, $ksub, $iv) != -1)
    {
        /* Encrypt data */
        $ctxt = mdecrypt_generic($td, $ptxtsub);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return $ctxt;
    } //end if
}

Мне нужно извлечь эти данные в среде PHP7 .4, даже если только повторно зашифровать их чем-то получше, но я не уверен, как для воспроизведения операций mcrypt с вещами, которые существуют в PHP7 .4, например с натрием. Я полагаю, что одним из способов было бы запустить какую-то устаревшую установку PHP, в которой все еще есть mcrypt, и сделать это в автономном режиме, но есть ли более прямой способ кодирования метода дешифрования?

1 Ответ

1 голос
/ 04 августа 2020

Хотя mcrypt больше не является частью PHP (по уважительным причинам), он все еще существует как модуль, который вы можете установить для PHP 7.4

https://pecl.php.net/package/mcrypt

Установите его, не забудьте повторно зашифровать все данные, после обновления всех старых данных измените свой код, чтобы он больше не использовался, и удалите расширение.

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