У меня есть устаревшая база данных с контентом, который был зашифрован с помощью 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, и сделать это в автономном режиме, но есть ли более прямой способ кодирования метода дешифрования?