Mcrypt, une bibliothèque de cryptage héritée, a vu son retrait en raison de vulnérabilités de sécurité et de l'émergence d'OpenSSL en tant que norme de l'industrie. Bien que le passage de Mcrypt à OpenSSL puisse sembler intimidant, cela peut être simplifié en comprenant les principales différences et en adoptant des stratégies appropriées.
Blowfish, le chiffrement que vous utilisez, nécessite remplissage des données pour le cryptage. OpenSSL utilise le remplissage PKCS#7, tandis que Mcrypt utilise PKCS#5. PKCS#7 nécessite une longueur de remplissage minimale de 1, tandis que PKCS#5 accepte 0. Cette différence affecte les résultats cryptés obtenus à partir de chaque bibliothèque.
En mode ECB, que vous En cas d'emploi, un vecteur d'initialisation (IV) n'est pas requis. Toutefois, ce n’est pas le cas dans les autres modes de cryptage. Assurez-vous de définir la longueur IV sur 0 lorsque vous utilisez OpenSSL pour le mode ECB.
Pour décrypter les données chiffrées avec Mcrypt à l'aide d'OpenSSL, un remplissage manuel avec PKCS#7 est requis avant le chiffrement. . Cela garantit la compatibilité entre les deux bibliothèques.
Le code fourni démontre les principales différences et les techniques de remplissage appropriées :
$key = "anotherpassword1"; $str = "does it work 12"; // Mcrypt padding $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); // OpenSSL padding $enc = openssl_encrypt($str, 'bf-ecb', $key, true); // Decrypt using both methods $dec_mcrypt = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); $dec_openssl = openssl_decrypt($enc, 'bf-ecb', $key, true); echo bin2hex($enc) . PHP_EOL; var_dump($dec_mcrypt); echo PHP_EOL; var_dump($dec_openssl);
Ce code démontre un cryptage et un déchiffrement réussis. en utilisant à la fois Mcrypt et OpenSSL, en appliquant le remplissage PKCS#7 pour la compatibilité.
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!