La compatibilité de Mcrypt avec OpenSSL est un sujet de débat. Certaines sources affirment qu'OpenSSL ne peut pas déchiffrer les données chiffrées à l'aide de Mcrypt, tandis que d'autres suggèrent que cela est possible avec l'utilisation du remplissage.
[Post 1](https://stackoverflow.com/a/19748494/ 5834657) indique que le décryptage est impossible, tandis que [Post 2](https://stackoverflow.com/a/31614770/5834657) suggère que cela est réalisable avec le bon rembourrage. Cependant, l'exemple de remplissage fourni dans l'article est spécifiquement destiné à Mcrypt et peut ne pas être applicable à OpenSSL.
Pour tester la compatibilité, nous avons modifié le code Mcrypt existant pour utilisez OpenSSL. La fonction de décryptage modifiée se lit comme suit :
public function decrypt($data, $key) { $salt = substr($data, 0, 128); $enc = substr($data, 128, -64); $mac = substr($data, -64); list ($cipherKey, $macKey, $iv) = $this->getKeys($salt, $key); if ($mac !== hash_hmac('sha512', $enc, $macKey, true)) { return false; } $dec = openssl_decrypt($enc, $this->cipher, $cipherKey, OPENSSL_RAW_DATA, $iv); $data = $this->unpad($dec); return $data; }
Nous avons testé ce code modifié en chiffrant une chaîne avec la bibliothèque Mcrypt, puis en essayant de la déchiffrer à l'aide de notre code basé sur OpenSSL. Cependant, nous n’avons reçu qu’une réponse vide. L'erreur semble provenir de la ligne $data = $this->unpad($dec). Lorsque nous avons commenté cette ligne, nous avons obtenu une chaîne confuse ressemblant au format crypté d'origine.
Malheureusement, notre tentative de déchiffrement des données cryptées par Mcrypt à l'aide d'OpenSSL a échoué. Il est possible que le remplissage spécifique utilisé par Mcrypt ne soit pas compatible avec OpenSSL, ou qu'il puisse y avoir d'autres incompatibilités sous-jacentes qui empêchent le décryptage réussi.
Une enquête plus approfondie est nécessaire pour déterminer s'il est vraiment impossible de déchiffrer les données chiffrées par Mcrypt. données avec OpenSSL, ou s'il existe une solution de contournement qui n'a pas encore été découverte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!