PHP7.1 альтернатива mcrypt

Начиная с версии 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");

Можете ли вы предложить несколько альтернатив?

14

Решение

Вы должны использовать openssl_encrypt вместо. С уважением!

16

Другие решения

Рассмотреть возможность использования разрядить или же RNCryptor, они обеспечивают полное решение, поддерживаются и являются правильными.

1

Как упоминалось выше, open_ssl является хорошей альтернативой для mcrypt.
Единственная проблема, с которой я столкнулся в open_ssl, заключается в том, что его нельзя использовать для больших строк.

Я написал скрипт (статический класс), который решает эту проблему (большие строки разделяются на куски и зашифровываются / дешифруются отдельно в фоновом режиме).

Смотри публичную суть:
https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba

0

За 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);
0

После нескольких итераций и танцев с документация Я создал решение для замены устаревшей функции 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;
}
0
По вопросам рекламы [email protected]