Если вы столкнулись с сообщением об ошибке «Неустранимая ошибка PHP: необнаруженная ошибка: вызов неопределенной функции mcrypt_encrypt()» в вашем приложении PHP, это означает, что функция mcrypt_encrypt() недоступна или неопределена. Эта ошибка обычно возникает при попытке использовать расширение mcrypt, которое устарело и было удалено в последних версиях PHP. В этой статье мы рассмотрим несколько способов решения этой проблемы и предоставим примеры кода, которые помогут вам ее решить.
Метод 1. Установите и включите расширение OpenSSL
Один из способов решения этой проблемы — использовать расширение OpenSSL в качестве альтернативы mcrypt. Расширение OpenSSL предоставляет различные криптографические функции, включая шифрование и дешифрование. Чтобы включить расширение OpenSSL, выполните следующие действия:
- Найдите файл конфигурации PHP (php.ini).
- Откройте файл php.ini в текстовом редакторе.
- Найдите следующую строку:
;extension=openssl. - Удалите точку с запятой (;) в начале строки, чтобы раскомментировать ее.
- Сохраните изменения и перезапустите веб-сервер.
Пример кода:
<?php
$plaintext = "Hello, world!";
$key = "secret_key";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$ciphertext = openssl_encrypt($plaintext, 'aes-256-cbc', $key, 0, $iv);
echo "Ciphertext: " . $ciphertext;
?>
Метод 2: используйте расширение Sodium
Другой альтернативой mcrypt является расширение Sodium, которое предоставляет современную и безопасную библиотеку шифрования. Расширение Sodium доступно начиная с PHP 7.2. Чтобы использовать расширение Sodium, выполните следующие действия:
- Убедитесь, что ваша версия PHP 7.2 или выше. Вы можете проверить версию PHP, запустив
php -vв командной строке. - Если ваша версия PHP ниже 7.2, рассмотрите возможность обновления до поддерживаемой версии.
- Включите расширение Sodium в файле конфигурации PHP (php.ini), удалив точку с запятой (;) из строки
;extension=sodium. - Сохраните изменения и перезапустите веб-сервер.
Пример кода:
<?php
$plaintext = "Hello, world!";
$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);
echo "Ciphertext: " . base64_encode($ciphertext);
?>
Способ 3. Используйте стороннюю библиотеку шифрования
Если приведенные выше методы не подходят для вашего случая использования, вы можете рассмотреть возможность использования сторонней библиотеки шифрования, обеспечивающей совместимость с PHP, например OpenSSL-оболочки или defuse/php-encryption. Эти библиотеки предоставляют простой в использовании API для задач шифрования и дешифрования и могут быть установлены через композитор.
Пример кода с использованием библиотеки defuse/php-encryption:
<?php
require 'vendor/autoload.php';
use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;
$plaintext = "Hello, world!";
$key = Key::createNewRandomKey();
$ciphertext = Crypto::encrypt($plaintext, $key);
echo "Ciphertext: " . $ciphertext;
?>
Обнаружение ошибки «Неустранимая ошибка PHP: неперехваченная ошибка: вызов неопределенной функции mcrypt_encrypt()» может расстроить, но, к счастью, существует несколько способов ее устранения. В этой статье мы рассмотрели три подхода: установку и включение расширения OpenSSL, использование расширения Sodium и использование сторонней библиотеки шифрования. Следуя этим методам и соответствующим примерам кода, вы сможете устранить эту ошибку и продолжить работу с безопасным шифрованием в своих приложениях PHP.
Не забывайте всегда обновлять свою среду PHP и рассмотрите возможность использования современных библиотек шифрования для обеспечения безопасности ваших данных.