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
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 "[b][i]hello world[/i][/b]" en "[b][i]9F3B0437A62248E9A1D914201532C9A9[/i][/b]" avec la clé "[b][i]1111222233334444[/i][/b]".
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]<?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)));
?>[/php]La personne qui l'a posté (il y a des années..) a ajouté : "[i]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...[/i]"
Cependant j'ai besoin d'un script qui me permet de faire l'inverse, c'est à dire, à partir du mot crypté "[b][i]9F3B0437A62248E9A1D914201532C9A9[/i][/b]" et de la clé "[b][i]1111222233334444[/i][/b]" me permettent d'obtenir "[b][i]hello world[/i][/b]"...
Apparement ce script provient du script suivant :
[php]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));
}[/php] avec $val pour le texte, et $ky pour la clé...
j'ai donc essayé ce script ( et une rimbanbelle d'autres...) :
[php]<?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);
?>[/php]
Or, lorsque j'essaye de decrypter "9F3B0437A62248E9A1D914201532C9A9", je n'obtiens jamais "[b][i]hello world[/i][/b]"... mais "D•Ã*€BË>vóÜBäô‚vZŠáNJ}fšæÚ+ñ"......
Quelqu'un serait-il d'ou viens mon erreur?
Merci pour votre aide