Cryptage AES <-> Java / PHP
Chers amis développeurs, bien le bonjour :)
Voila, j'ai un petit souci de cryptage avec php....
J'ai une app en java qui crypte mes données.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| SecretKeySpec KeySpec = new SecretKeySpec(KeyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES");
byte[] inputByte = inString.getBytes("UTF-8");
if (sens=="decrypt")
{
cipher.init(Cipher.DECRYPT_MODE, KeySpec);
return new String (cipher.doFinal(Base64.decode(inputByte, Base64.DEFAULT)));
}
else
{
cipher.init(Cipher.ENCRYPT_MODE, KeySpec);
return new String (Base64.encode(cipher.doFinal(inputByte), Base64.DEFAULT));
} |
Jusque la pas de problèmes, ce petit bout de code fait parfaitement le travail en local.
Tout se complique losque j'essaye de communiquer avec le serveur (PHP)...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function encrypt($sStr)
{
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $Key, addpad($sStr), MCRYPT_MODE_ECB));
}
function decrypt($sStr)
{
return rempad(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $Key, base64_decode($sStr), MCRYPT_MODE_ECB));
}
function addpad($str)
{
$block = mcrypt_get_block_size('aes');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return $str;
}
function rempad($str)
{
$block = mcrypt_get_block_size('aes');
$len = strlen($str);
$pad = ord($str[$len-1]);
$str=substr($str, 0, strlen($str) - $pad);
return $str;
} |
Voici le code que j'utilise. Les données sont bien cryptées, le serveur reçoit bien les données
et les décrypte a peu près correctement, mais il semble qu'il reste un souci de "padding" (pkcs5 etc)
J'ai essayé pas mal de paramètres, avec ou sans les fonctions addpad/rempad,
en AES, CBC, ECB, PKCS5, avec ou sans ivs, etc... je désespére un peu...
Quelqu'un saurait m'indiquer ou ça cloche exactement ?
En gros le souci majeur est que lors de la réponse du serveur à java, la fin de la chaîne semble être corrompue.
Il s'agit de JSON dans mon cas, et cette chaîne ne peut donc être "parsée"...
Merci d'avance pour vos lumières ;)
K.