Maison >développement back-end >tutoriel php >Comment migrer de Mcrypt vers OpenSSL pour Blowfish Encryption ?

Comment migrer de Mcrypt vers OpenSSL pour Blowfish Encryption ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-08 14:59:11388parcourir

How to Migrate from Mcrypt to OpenSSL for Blowfish Encryption?

Migration de Mcrypt vers OpenSSL

Votre implémentation actuelle utilise Mcrypt pour le chiffrement, mais vous envisagez de passer à OpenSSL. Le chiffre Blowfish de Mcrypt en mode ECB présente des différences par rapport à OpenSSL, telles que l'exigence d'une longueur IV de 56 pour Mcrypt et de 0 pour OpenSSL.

Pour migrer les modules de manière transparente :

  • Comprendre la différence de remplissage :

    • Mcrypt utilise Rembourrage PKCS#5, tandis qu'OpenSSL utilise PKCS#7. Assurez un remplissage cohérent lors du chiffrement des données.
  • Remplissage manuel :

    • Étant donné qu'OpenSSL utilise PKCS#7, vous devez manuellement compléter les données avant de les chiffrer avec Mcrypt. Cela implique d'ajouter « 1 » aux données.
  • Initialisation IV :

    • Le mode ECB n'utilise pas IV. Par conséquent, lorsque vous utilisez ECB avec OpenSSL, votre code doit supprimer l'initialisation IV.
  • Considérations sur la longueur de clé :

    • Mcrypt prend en charge des tailles de clé jusqu'à 56 octets, alors qu'OpenSSL n'a pas de limite de taille de clé. Ajustez la taille de votre clé en conséquence.
  • Rechiffrement :

    • Pour garantir la compatibilité, pensez à rechiffrer votre clé existante. Données cryptées par Mcrypt à l'aide d'OpenSSL. Cela élimine toute divergence due aux différents algorithmes de remplissage.

Exemple de code :

$key = "anotherpassword1";
$str = "does it work 12";

// MCRYPT with PKCS#7 padding
$iv = str_repeat("", 8); // Dummy IV for ECB
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB, $iv);

// OpenSSL with PKCS#7 padding
$enc = openssl_encrypt($str, 'bf-ecb', $key, true);

// Decrypt with OpenSSL (requires re-encryption)
// $dec = openssl_decrypt($enc, 'bf-ecb', $key, true);
// echo var_dump($dec);

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