Cryptage

alheskandre
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 19:01

Bonjour, voici mon probleme, j'ai fait 2 fonction, une pour crypter, l'autre pour decrypter, malheuresement, seulement le cryptage marche...
voici le code
    <?php
	function rijndael_crypt($data, $key)
    {

	
      $key = 'lol';
     // $iv = 'abcdefghijklmnopqrstuvwxyz';
      $data = 'alexandre';
	  
	  $iv_size  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
	  $iv = substr('abcdefghijklmnopqrstuvwxyz', 0, $iv_size); 
      $encryptedcbc = mcrypt_cbc(MCRYPT_RIJNDAEL_128,$key,$data,MCRYPT_ENCRYPT,$iv);

      return base64_encode($encryptedcbc);
   
   
   
   }
   
   
   	function rijndael_decrypt($data, $key)
    {

	
      $key = 'lol';
     // $iv = 'abcdefghijklmnopqrstuvwxyz';
      $data = 'alexandre';
	  
	  $iv_size  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
	  $iv = substr('abcdefghijklmnopqrstuvwxyz', 0, $iv_size); 
      $decryptedcbc = mcrypt_cbc(MCRYPT_RIJNDAEL_128,$key,$data, MCRYPT_DECRYPT,$iv);

	  // return base64_encode($decryptedcbc);
   return  $decryptedcbc;
   
   }
   
    echo 'Cryptage<br>';
	$crypted = rijndael_crypt('alexandre','lol');
	echo $crypted;
	echo '<br>Decryptage...<BR>';
	$decrypted = rijndael_decrypt($crypted, 'lol');
	echo $decrypted;
	

    ?>
Merci!

alheskandre
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 19:25

Dommage, je ne peut pas editer...
Enfin, l'information que je voulais ajouter, c'est que le scripte retourne ca:

[quote]Cryptage
4qp0Z4tQbUBR9scqhESiRw==
Decryptage...
1ƒr¼

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 janv. 2007, 19:40

Dommage, je ne peut pas editer...
Erm, ce n'est pas un wiki, seuls les utilisateurs enregistrés peuvent éditer leurs messages.

Au fait, je ne connais pas mcrypt mais je viens de cliquer sur le nom des fonctions et le manuel dit
mcrypt_cbc() ne doit plus être utilisée. Vous pouvez la remplacer par mcrypt_generic() et mdecrypt_generic().
Donc réécrire tes fonctions sur les conseils du manuel serait un bon début je pense.

alheskandre
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 20:29

Merci pour ton conseil,
et si je disais que je ne pouvais pas editer, c'est parceque, je ne suis pas enregistrern donc logique que je ne puisse pas editer mon propre message...
A ma connaissance un forum dont les utilisateurs editent leurs propre message, c'est pas vraiment un wiki :/

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 janv. 2007, 20:37

Tout a fait d'accord, mais comme tu n'est pas enregistré, comment savoir si c'est ton message ou celui d'un autre ;)

Sinon, pas mieux qu'Hubert
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 843 Messages

18 janv. 2007, 23:37

regarde le tuto de ripat sur le site php france

y'a plus qu'a le suivre à la lettre et tout fonctionnera ;)

petit info supplementaire:
j'ai remarqué que lorsqu'on est connecter à mysql, il y a un bug qui fait foirer les cryptage ou decryptage... Donc la seul precaution sera de crypter et decrypter avant de te connecter à mysql :roll:

voila, tu verra le tuto est on ne peut plus claire, simple et efficace :)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Eléphant du PHP | 281 Messages

19 janv. 2007, 13:46

---
Modifié en dernier par Ouaibou le 07 juil. 2007, 11:11, modifié 1 fois.

alheskandre
Invité n'ayant pas de compte PHPfrance

19 janv. 2007, 20:00

ta classe est pas mal, j'y est jeté un coup d'oeil...
Il manque un truc qui serait sympa, c'est que tu donne un IV et que si c'est trop longt, ca te la coupe.... Comme en delphi...

Sinon, en utilisant les nouvelles fonction de cryptage comme ceci:

    <?php
	function rijndael_crypt($data, $key)
    {

	
	  

 $iv_size  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
	  $iv = substr('abcdefghijklmnopqrstuvwxyz', 0, $iv_size); 

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');

mcrypt_generic_init($cipher, $key, $iv);
	  	  echo '<br>decrypt iv: '.$iv.' key: '.$key.' data: '.$data.' <br>';
$encrypted = mcrypt_generic($cipher,$data);
mcrypt_generic_deinit($cipher);



      return base64_encode($encrypted);
   
   
   
   }
   
   
   	function rijndael_decrypt($data, $key)
    {

	

 $iv_size  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
	  $iv = substr('abcdefghijklmnopqrstuvwxyz', 0, $iv_size); 

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');


mcrypt_generic_init($cipher, $key, $iv);
	  	  echo '<br>decrypt iv: '.$iv.' key: '.$key.' data: '.$data.' <br>';
$decrypted = mdecrypt_generic($cipher,$data);
mcrypt_generic_deinit($cipher);



	   return base64_encode($decrypted);
   
   }
   
    echo '<br>Cryptage<br>';
	$crypted = rijndael_crypt('alexandre','lol');
	echo $crypted;
	echo '<br>Decryptage...<BR>';
	$decrypted = rijndael_decrypt($crypted, 'lol');
	echo '<br> decrypted :'.$decrypted;


    ?>
Le script me renvoie
Cryptage

decrypt iv: abcdefghijklmnop key: lol data: alexandre
4qp0Z4tQbUBR9scqhESiRw==
Decryptage...

decrypt iv: abcdefghijklmnop key: lol data: 4qp0Z4tQbUBR9scqhESiRw==

decrypted :1QOIm5EiRbhAA65XY0+Jkir6+3vgMfOwL1r6Q8ku86c=
Il n'arrive toujour pas a decrypter... pourtant, tout est pareil, IV, clé, et j'ai bien verifié, quand je decrypte ce que renvoie ma fonction de cryptage avec un prog que j'ai fait sous windows, ca marche...

Je ne comprend vraiment pas pourquoi il ne veut pas décrypter... :tir2:

Mammouth du PHP | 843 Messages

20 janv. 2007, 17:56

à mon avis ta longueur de clé ou de ton vecteur sont erronés... :-k

lance le script fournis par ripat pour testé les mode de cryptage et assure toi que ton mode (rijndael) utilisé utilise bien une clé et un vecteur de la bonne longueur.
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

ViPHP
ViPHP | 1380 Messages

20 janv. 2007, 19:39

Si tu encodes ton texte crypté en base 64, tu dois le décoder avant de le décrypter.
function rijndael_decrypt($data, $key){

	// décodage des caractères
	$data = base64_decode($data);

	$iv_size  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
	$iv = substr('abcdefghijklmnopqrstuvwxyz', 0, $iv_size); 
	$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');
	mcrypt_generic_init($cipher, $key, $iv);
	echo '<br>decrypt iv: '.$iv."($iv_size) key: ".$key.' data: '.$data.' <br>';
	$decrypted = mdecrypt_generic($cipher, $data);
	mcrypt_generic_deinit($cipher);

	// suppression des espaces exédentaires générés par le decrypt
	return trim($decrypted);

}
ripat

alheskandre
Invité n'ayant pas de compte PHPfrance

20 janv. 2007, 23:56

Alors ca, je n'y avais pas pensé! Que je suis con mdr!!

Merci beaucoup....