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.
Jusque la pas de problèmes, ce petit bout de code fait parfaitement le travail en local.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)); }
Tout se complique losque j'essaye de communiquer avec le serveur (PHP)...
Voici le code que j'utilise. Les données sont bien cryptées, le serveur reçoit bien les données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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.
Partager