41 votes

PHP7.1 et Laravel 5.3 : la fonction mcrypt_get_iv_size() est obsolète

Je utilise Laravel 5.0 pour tous mes projets. Hier, j'ai mis à jour ma version de PHP de 7.0.x à la version 7.1.0. Une fois mis à jour, j'ai essayé d'ouvrir mon projet Laravel et j'ai vu ce message ci-dessous :

ErrorException dans Encrypter.php ligne 303 : 
La fonction mcrypt_get_iv_size() est obsolète

dans Encrypter.php ligne 303
à HandleExceptions->handleError('8192', 'La fonction mcrypt_get_iv_size() est obsolète', 'C:\wamp64\www\project1\vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.php', '303', array()) dans Encrypter.php ligne 303

Puis-je savoir comment puis-je résoudre cela ? Est-ce que l'utilisation de Laravel 5.3 résout le problème ? Je n'ai pas envie de mettre à jour mon Laravel vers 5.3 parce que c'est un gros projet et cela prendra beaucoup de temps à mettre à jour. Il y a trop de différences entre ces deux versions. Beaucoup de codes doivent être modifiés.

Y a-t-il un moyen plus simple de résoudre ce problème ?

0 votes

Ne pouvez-vous pas utiliser openssl_cipher_iv_length ?

0 votes

Il est préférable de ne pas utiliser mcrypt, car c'est un logiciel abandonné, qui n'a pas été mis à jour depuis des années et ne prend pas en charge le rembourrage standard PKCS#7 (anciennement PKCS#5), seulement un rembourrage nul non standard qui ne peut même pas être utilisé avec des données binaires. mcrypt présente de nombreux bugs datant de 2003. L'extension mcrypt est obsolète et sera supprimée dans PHP 7.2. Au lieu de cela, envisagez d'utiliser defuse ou RNCryptor, ils offrent une solution complète et sont maintenus et corrects.

30voto

Benjamin Kohl Points 121

Cette erreur se produit parce que vous avez probablement autre chose que AES-256-CBC comme votre chiffrement dans votre fichier config/app.php qui dépend de l'extension mcrypt. Peut-être utilisez-vous MCRYPT_RIJNDAEL_256 ou MCRYPT_RIJNDAEL_128 ?

La meilleure chose à faire sans une mise à niveau complète de Laravel est d'installer le cryptage hérité et de l'utiliser pour mettre à jour toutes vos données chiffrées pour utiliser le chiffrement AES-256-CBC qui est le chiffrement par défaut depuis Laravel 5.1, je crois. Une fois que vous aurez fait cela, vous devriez pouvoir utiliser PHP 7.1 pour votre application Laravel.

2 votes

Changer cipher dans config/app.php ne résout pas le problème: 'cipher' => 'AES-256-CBC',

0 votes

Changer le chiffrement fait partie du processus. Utiliser ce chiffrement devrait certainement arrêter l'erreur mcrypt, sauf si quelque chose d'autre dans votre application utilise mcrypt.

25voto

Debiprasad Points 647

Ajoutez ceci au début du config/app.php:

error_reporting(E_ALL ^ E_DEPRECATED);

Source: https://stackoverflow.com/a/42515505/225790

0 votes

Merci mon sauveur de vie.

2 votes

C'est génial, mais seulement pour le développement local. En production, vous devez avoir tout configuré correctement.

0 votes

@istavros Si l'environnement est mieux mis à jour que votre code, alors vous devriez mettre à jour votre code vers la version améliorée si vous ne voulez pas obtenir d'erreurs pour des fonctions obsolètes. Mais parfois, il pourrait être possible de mettre à jour votre code pour une raison quelconque mais l'environnement doit être mis à jour. Dans ce cas, de tels contournements peuvent vous aider. Vous pouvez travailler avec des fonctionnalités obsolètes avant qu'elles ne deviennent obsolètes.

22voto

Quynh Le Points 217

Dans votre fichier de configuration config/app.php, vous devez mettre à jour le chiffrement en "AES-256-CBC" et définir votre clé sur une chaîne de 32 octets aléatoire qui peut être générée de manière sécurisée en utilisant php artisan key:generate

0 votes

A fonctionné pour moi. J'ai dû régénérer la clé en utilisant php artisan key:generate. J'ai essayé sans régénérer la clé et cela n'a pas fonctionné. Par la suite, c'était bon.

0 votes

A fonctionné pour moi, dans config/app.php => 'cipher' => 'AES-256-CBC', et "php artisan key:generate"

1voto

prakash pokhrel Points 262

Pour résoudre ce problème, il suffit de changer le chiffrement dans app.php de 'MCRYPT_RIJNDAEL_128' à 'AES-256-CBC'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X