[RESOLU] Probleme avec l'encryption encryption AES ...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Probleme avec l'encryption encryption AES ...

Re: Probleme avec l'encryption encryption AES ...

par hamdi369 » 12 nov. 2015, 16:52

Arthur Merciiiiiiii! c'est magnifique! Vous m'enlevez une de ces epines du pied! :)

Re: Probleme avec l'encryption encryption AES ...

par @rthur » 12 nov. 2015, 11:28

Bonjour,

C'est tout bête en fait ;)
Après ton encodage, tu fais une conversion en hexadécimal avec la fonction bin2hex()

Donc pour le décodage, il faut d'abord que tu fasses l'opération inverse avec la fonction hex2bin()


Voila ce que ça donnerait :
<?php
header('Content-Type: text/html; charset=utf-8');

$text = "hello world";

$key = "1111222233334444"; //MUST be 16 characters
$mode=MCRYPT_MODE_ECB;    
$enc=MCRYPT_RIJNDAEL_128;
 
function aes_encrypt($val,$key) {
	global $mode, $enc;
	$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
	$val_enc=mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
	return strtoupper(bin2hex($val_enc));
}

function aes_decrypt($val,$key) {
	global $mode, $enc;
	$val=hex2bin($val);
	return mcrypt_decrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM) ); 
}



$val_enc=aes_encrypt($text,$key);
echo $val_enc."<hr />";
echo aes_decrypt($val_enc,$key);

Probleme avec l'encryption encryption AES ...

par hamdi369 » 12 nov. 2015, 08:58

Bonjour

Voilà, j'ai un probleme dont cela fait des heures que j'essaye en vain de résoudre.... :(

j'ai un petit programme qui crypte "hello world" en "9F3B0437A62248E9A1D914201532C9A9" avec la clé "1111222233334444".
Il s'agit de l'algorythme de cryptage AES 128 bit, et le mode ECB.

Apres des heures de recherches, j'ai reussi à trouver un script PHP qui donne le meme resultat :
<?php
$password = "1111222233334444"; //MUST be 16 characters
$text = "hello world";
 
function aes_encrypt($val,$ky) {
    $mode=MCRYPT_MODE_ECB;    
    $enc=MCRYPT_RIJNDAEL_128;
    $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
    return mcrypt_encrypt($enc, $ky, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
}
 
echo strtoupper(bin2hex(aes_encrypt($text,$password)));
?>
La personne qui l'a posté (il y a des années..) a ajouté : "Basically what has to happen, is the returned encryption must be padded out, then turned to uppercase hex. Then it'll work like a charm in AES Fusion..."

Cependant j'ai besoin d'un script qui me permet de faire l'inverse, c'est à dire, à partir du mot crypté "9F3B0437A62248E9A1D914201532C9A9" et de la clé "1111222233334444" me permettent d'obtenir "hello world"...

Apparement ce script provient du script suivant :
function aes_decrypt($val,$ky) 
{ 
    $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
    for($a=0;$a<strlen($ky);$a++) 
      $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
    $mode = MCRYPT_MODE_ECB; 
    $enc = MCRYPT_RIJNDAEL_128; 
    $dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND) ); 
    return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); 
} 
 
function aes_encrypt($val,$ky) 
{ 
    $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
    for($a=0;$a<strlen($ky);$a++) 
      $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
    $mode=MCRYPT_MODE_ECB; 
    $enc=MCRYPT_RIJNDAEL_128; 
    $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16))); 
    return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND)); 
}
avec $val pour le texte, et $ky pour la clé...

j'ai donc essayé ce script ( et une rimbanbelle d'autres...) :
<?php 
$ky ="1111222233334444";
$val ="9F3B0437A62248E9A1D914201532C9A9";
function mysql_aes_decrypt($val,$ky) 
{ 
    $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
    for($a=0;$a<strlen($ky);$a++) 
      $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
    $mode = MCRYPT_MODE_ECB; 
    $enc = MCRYPT_RIJNDAEL_128; 
    $dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) ); 
    return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); 
} 
 
function mysql_aes_encrypt($val,$ky) 
{ 
    $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; 
    for($a=0;$a<strlen($ky);$a++) 
      $key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a])); 
    $mode=MCRYPT_MODE_ECB; 
    $enc=MCRYPT_RIJNDAEL_128; 
    $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16))); 
    return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM)); 
} 
echo mysql_aes_decrypt($val,$ky);
?>

Or, lorsque j'essaye de decrypter "9F3B0437A62248E9A1D914201532C9A9", je n'obtiens jamais "hello world"... mais "D•Ã*€BË>vóÜBäô‚vZŠáNJ}fšæÚ+ñ"......

Quelqu'un serait-il d'ou viens mon erreur?
Merci pour votre aide