Maison >développement back-end >tutoriel php >Comment migrer de Mcrypt vers OpenSSL pour le cryptage des données en PHP ?

Comment migrer de Mcrypt vers OpenSSL pour le cryptage des données en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 16:52:03482parcourir

How to Migrate from Mcrypt to OpenSSL for Data Encryption in PHP?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn