Implémentation d'OpenSSL à la place de Mcrypt pour le cryptage
Dans l'application PHP qui utilise actuellement Mcrypt pour le cryptage des données, il est nécessaire de le remplacer Mcrypt avec OpenSSL. L'implémentation originale utilisait le chiffrement Blowfish en mode ECB, mais le remplacement de Mcrypt par OpenSSL pose un défi en raison des différents résultats de chiffrement et des longueurs IV requises.
Comprendre les divergences
Les deux les fonctions de chiffrement, mcrypt_encrypt et openssl_encrypt, produisent des résultats différents. De plus, mcrypt nécessite un IV de 56 octets pour Blowfish-ecb, tandis que openssl utilise un IV de longueur nulle. Ces différences proviennent des différents algorithmes de remplissage utilisés par Mcrypt (PKCS#5) et OpenSSL (PKCS#7).
Résoudre les différences de chiffrement
Pour atténuer les écarts de chiffrement , le remplissage manuel des données avec le remplissage PKCS#7 est nécessaire avant le chiffrement avec mcrypt. Cela garantit la compatibilité avec l'algorithme de remplissage utilisé par OpenSSL. L'exemple suivant illustre cette approche :
$key = "anotherpassword1"; $str = "does it work 12"; $enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB); $dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data $enc = openssl_encrypt($str, 'bf-ecb', $key, true); $dec = openssl_decrypt($enc, 'bf-ecb', $key, true); echo(bin2hex($enc).PHP_EOL); // Encrypted data var_dump($dec); // Decrypted data
Considérations relatives à la migration
Étant donné que le déchiffrement des données chiffrées avec Mcrypt à l'aide d'OpenSSL n'est pas pratique, la seule solution consiste à rechiffrer le données. Cela représente un effort de migration important, car toutes les données précédemment chiffrées doivent être rechiffrées à l'aide d'OpenSSL.
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!