Начиная с версии PHP 7.1.0 функция Mcrypt устарела.
Мои устаревшие строки кодируют / декодируют функции:
$key: secret key
$str: string$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));
$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
Можете ли вы предложить несколько альтернатив?
Вы должны использовать openssl_encrypt вместо. С уважением!
Рассмотреть возможность использования разрядить или же RNCryptor, они обеспечивают полное решение, поддерживаются и являются правильными.
Как упоминалось выше, open_ssl является хорошей альтернативой для mcrypt.
Единственная проблема, с которой я столкнулся в open_ssl, заключается в том, что его нельзя использовать для больших строк.
Я написал скрипт (статический класс), который решает эту проблему (большие строки разделяются на куски и зашифровываются / дешифруются отдельно в фоновом режиме).
Смотри публичную суть:
https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba
За MCRYPT_RIJNDAEL_256
Я разместил полный ответ для PHP7.3 здесь: https://stackoverflow.com/a/53937314/243782
фрагмент кода:
работает так с phpseclib библиотека
$rijndael = new \phpseclib\Crypt\Rijndael(\phpseclib\Crypt\Rijndael::MODE_ECB);
$rijndael->setKey(ENCRYPT_KEY);
$rijndael->setKeyLength(256);
$rijndael->disablePadding();
$rijndael->setBlockLength(256);
$decoded = $rijndael->decrypt($term);
После нескольких итераций и танцев с документация Я создал решение для замены устаревшей функции Mcrypt следующими функциями кодирования / декодирования на основе функций openssl_encrypt и openssl_decrypt:
//Return encrypted string
public function stringEncrypt ($plainText, $cryptKey = '7R7zX2Urc7qvjhkr') {
$length = 8;
$cstrong = true;
$cipher = 'aes-128-cbc';
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt(
$plainText, $cipher, $cryptKey, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $cryptKey, $as_binary=true);
$encodedText = base64_encode( $iv.$hmac.$ciphertext_raw );
}
return $encodedText;
}//Return decrypted string
public function stringDecrypt ($encodedText, $cryptKey = '7R7zX2Urc7qvjhkr') {
$c = base64_decode($encodedText);
$cipher = 'aes-128-cbc';
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ivlenSha2len = $ivlen+$sha2len;
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$plainText = openssl_decrypt(
$ciphertext_raw, $cipher, $cryptKey, $options=OPENSSL_RAW_DATA, $iv);
}
return $plainText;
}