Mcrypt_decrypt - Cryptage - décryptage avec PHP

Bonjour à tous,

Je travaille sur PHP sous Windows (Windows XP Professionnel), avec Easyphp 1.7, et je dois utiliser les fonctions de la librairie "mcrypt".

Si j’arrive sans problème à crypter du texte, il m’est par contre impossible d’en décrypter… :’(
Cela fait planter tout simplement planter mon serveur Apache !!! :non:

Savez-vous ce que je peux faire pour remédier à cela ?

La dll que j’ai récupérée sur internet n’est peut-être pas correcte ?
Elle était pourtant un site recommandé par PHP.net
http://ftp.emini.dk/pub/php/win32/mcrypt/

Avez-vous la solution ?? Pliiize.

Merci !

A tout hasard, voici le code :

srand() ;
$cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_ECB;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, $mode), MCRYPT_RAND);

$key = "123456789";
$texte = "Ceci est une phrase secrete…";

//on crypte le texte
$token = mcrypt_encrypt($cipher, $key, $texte, $mode, $iv);

echo "<b>MCRYPT_RIJNDAEL_128</b><br><br>";
echo "key : $key<br>";
echo "texte : $texte<br><br>";
echo "-> token : $token (texte encrypté en AES)<br>";
echo "<hr>";

//CI-DESSOUS, CA NE MARCHE PAS…

srand() ;
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, $mode), MCRYPT_RAND);
mdecrypt_generic(); //ça plante ici
$dec = mcrypt_decrypt($cipher, $key, $token, $mode, $iv); //et ici

echo "-> on décrypte le token : $dec<hr>";

pas de plantage sur mon serveur (Apache 2.0.58 + PHP 5.1.3), mais j’ai le warning suivant :
Warning: Wrong parameter count for mdecrypt_generic() in /var/www/htdocs/mcrypt.php on line 23

petit rappel sur l’utilisation de mdecrypt_generic > http://fr.php.net/manual/fr/function.mdecrypt-generic.php :super:

Edit: après test, tu peux tout simplement zapper cette ligne :oui:

Oui merci j’ai déjà vu cet exemple sur le site PHP.net, mais hélas chez moi l’affichage de “Encrypt” et de “Decrypt” renvoie la même chose…
:neutre:

cf. mon code ci-dessous :

$td = mcrypt_module_open(‘rijndael-128’, ‘’, ‘ecb’, ‘’);
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

$key = “this is a secret key”;
$texte = “Let us meet at 9 o’clock at the secret place.”;

//1 - Initialise le module de chiffrement
mcrypt_generic_init(&#036;td, &#036;key, &#036;iv);

//2 - Chiffre les données
&#036;encrypted_data = mcrypt_generic(&#036;td, &#036;texte);

//3 - Réinitialise les tampons pour le déchiffrement
mcrypt_generic_deinit(&#036;td);
mcrypt_generic_init(&#036;td, &#036;key, &#036;iv);
&#036;decrypted_data = mdecrypt_generic(&#036;td, &#036;encrypted_data);

//4 - Nettoie
mcrypt_generic_deinit(&#036;td);
mcrypt_module_close(&#036;td);

echo "Encrypt: ".$encrypted_data."<br>";
echo "Decrypt: ".$decrypted_data."<br>";

Pourquoi tant de haine ?.. :grrr:

chez moi ça fonctionne “à peu près” (il y’a quelques caractères bizarres après la chaine décrypter) :neutre: …

vérifie que les infos concernant le module mcrypt dans phpinfo() sont bien correctes par rapport à ce que tu veux utiliser, parce que je ne vois pas trop sinon :neutre: …

qu’entends-tu par “à peu près” ?! :??:

tu veux dire que chez toi, la chaine "decryptée" affichée, correspond à celle de départ ?! :ouch: (autrement dit que le décryptage marche ?!)

incroyable… bon ben je ne sais plus quoi faire alors… chez moi la chaine cryptée et la chaine décryptée sont identiques … … … … … … … … … :fou: (autrement dit le décryptage ne marche pas)

question subsidiaire : tu bosses sur Windows ou sur Linux ???

Pour info, sur le site de PHP.net voici le message d’un internaute :

http://fr.php.net/manual/fr/function.mdecrypt-generic.php

If you’re using this on the win32 platform, BEWARE!
The latest DLL (19-Jan-2004) contains a bug that keeps mdecrypt_generic from functioning.
Nearly drove me over the edge… The 30-Dec-2002 version seems to work with no trouble.

Autrement dit, il semblerait que la dernière DLL "php_mcrypt.dll" aie un problème… (et que le décryptage sous WINDOWS ne marche pas !!!)

Quelqu’un saurait-il où trouver une DLL “php_mcrypt.dll” qui fonctionne ?!

Merci ! :riva:

là je suis sur une “fresh install” de PHP 5.1.3 …
donc la DLL inclus dans ce package est correct :neutre: …
Edit : c’est en effet la version de 2002 :oui:
Version 2.5.7
Api No 20021217

quand je dis “à peu près”, voilà ce que j’obtiens :

te serait-il possible de mettre ta dll qui marche sur un site pour que je puisse la récupérer ?! :icon_biggrin:

et comme ça il ne me restera plus qu’à la récupérer (l’ancienne dll) pour écraser la mienne (la dll nouvelle-version-qui-plante)…
:icon_biggrin: :icon_biggrin: :icon_biggrin:

bah, récuper le zip de la dernière version de PHP
http://fr.php.net/get/php-5.1.3-Win32.zip/from/a/mirror

dézippes le dans un dossier quelconque …
et récupère le fichier mcrypt.dll (et uniquement celui là) que tu trouveras dans le dossier :wink:

Merci pour ton aide, mais je n’ai vraiment pas de bol. :frowning:

1/ J’ai récupéré le ZIP à l’adresse indiquée, extrait la dll “libmcrypt.dll” située dans le ZIP, et je l’ai mise là où il fallait :
C:\Program Files\EasyPHP1-7\php\extensions
C:\WINDOWS\system32

=> mais ça n’a rien changé… (soit dit en passant le poids des 2 dll est identique : 163 Ko)

2/ J’ai alors récupé la dll “php_mcrypt.dll” du ZIP, et je l’ai placée là où il fallait :
C:\Program Files\EasyPHP1-7\php\extensions

=> à présent mon serveur plante car il ne reconnait pas la DLL (il ne la trouve carrément pas !)
(soit dit en passant, le poids des dll est différent : 36 Ko -> 40 Ko pour la nouvelle - donc c’est plutôt bon signe : puisque le programme marche chez toi)

Conclusion :
comme la dll ne veut pas fonctionner sur ma machine. :confused: je suppose que c’est parce que je travaille sous Easyphp1.7 (qui utilise PHP 4.3.3 - et pas PHP5 comme toi)…
:neutre:

C’est vraiment pas de veine : il faut passer sous PHP5 exprès pour ça ?!

En tout cas, merci pour ton aide. :wink:

houla non malheureux, fallait pas changer la php_mcrypt.dll !!!
en effet, cette dernière, comme toutes les extensions de PHP (situé dans le dossier extensions\ et commençant par php_) sont compiler spécifiquement pour chaque version de PHP … donc il ne fallait surtout pas toucher à celle là …

par contre, normalement il suffit de changer la version de la libmcrypt.dll pour que ça fonctionne …
il se peut que leur poids soit identique, mais c’est bizarre que ça fonctionne pas mieux (tu as bien fait le changement serveur éteind avant de le redémarrer ?)

sinon bah, le mieux consiste encore à faire une install manuelle d’Apache+PHP+MySQL … au moins, tu as un controle parfait de tes serveurs :oui:
t’as de la chance, car “on” as gratté une doc d’install manuelle pas mal dans le Wiki :wink:
http://www.clubic.com/wiki/PHP#Installation_manuelle

Finalement j’ai installé la version Easyphp 1.8 et ça marche très bien maintenant… :lol:

Par contre, comme la dll “libmcrypt.dll” que j’utilise actuellement provient du ZIP d’installation de PHP5 et donc pas du site de référence : http://ftp.emini.dk/pub/php/win32/mcrypt/
… je ne peux pas dire si le problème de décryptage était dû à la dll “php_mcrypt.dll” (de Easyphp 1.7) ou à la dll “libmcrypt.dll” (du site de référence)…

En tout cas, maintenant mon cryptage - décryptage de texte marche très bien.
C’est-y pas fabuleux ça ?! :pt1cable:

Merci encore et A+

:jap:

Pour ceux qui auraient aussi ce problème, je viens de trouver la solution tout en restant sous easyPHP1-7. C’est effectivement le fichier libmcrypt.dll qui pose problème.

Pour corriger, il ne faut pas récupérer le fichier qui se trouve à l’adresse http://ftp.emini.dk/pub/php/win32/mcrypt mais celui qui est ici

http://ftp.emini.dk/pub/php/win32/mcrypt/old/

J’ai ensuite copié ce fichier dans windows\system32 et depuis tout roule, plus de plantage :miam:

Et sinon en installant apache 2 + php5.1.6 ça serait pas plus simple?