2012-09-13 6 views
1

J'essaie de crypter une chaîne XML, de l'enregistrer quelque part, puis de la décrypter plus tard (en utilisant blowfish en mode cbc).Php Blowfish décryptage des données de brouillage

Lorsque je décrypte la chaîne, elle brouille les 4 premiers caractères.

$text = "<?xml version="1.0" encoding="ISO-8859-1"?> ...."; 
$td = mcrypt_module_open('blowfish', '', 'cbc', ''); 
$iv = 'kd84h28v'; 
$ks = mcrypt_enc_get_key_size($td); 
$key = substr(md5('randomString1234'), 0, $ks); 
mcrypt_generic_init($td, $key, $iv); 
$cypher = mcrypt_generic($td, $text); 
print mdecrypt_generic($td, $cypher); 

# prints: çGÖºÌrsion="1.0" encoding="ISO-8859-1"?> 

J'utiliser le mode ecb au lieu - qui déchiffre bien - sauf l'implémentation actuelle de php ne tient pas compte du iv.

Des idées que je fais mal?

+0

BCE ne supporte pas IV, ce n'est pas un détail de mise en œuvre. C'est comme dire "Je conduirais une moto, sauf que les modèles Honda actuels ne viennent pas avec quatre roues." – NullUserException

Répondre

0

De l'manual:

Il est très important de ré-initialiser le tampon de chiffrement avec mcrypt_generic_init() avant d'essayer de décrypter les données.

Alors vous avez besoin probablement quelque chose comme ceci:

mcrypt_generic_init($td, $key, $iv); 
$cypher = mcrypt_generic($td, $text); 
mcrypt_generic_deinit($td); 
mcrypt_generic_init($td, $key, $iv); 
print mdecrypt_generic($td, $cypher); 
+0

Cela a fonctionné, merci. Bien que je me demande pourquoi je n'ai pas besoin de ça pour décrypter ecb? –

+0

Je suppose que cela a quelque chose à voir avec les différentes façons de rembourrage, mais je ne sais pas assez sur les internes de mcrypt pour l'affirmer en toute confiance. – Nim