Salut,

je développe une application permettant de communiquer de manière sécurisée entre un serveur java et un client mobile (iphone). Pour cela j'utilise le JCE bouncycastle pour java et openssl pour iPhone.

Cependant, j'ai un problème : je chiffre mon message avec RSA sous java mais quand je le déchiffre sous openssl, le message est différent de celui d'origine.

Mon serveur fait comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
//coté serveur langage JAVA
 
 
//récuperation de la clé publique client
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus,exposant);
KeyFactory fact = KeyFactory.getInstance("RSA");
Key publicKey = fact.generatePublic(keySpec);
 
//chiffrement du message
Cipher cipher = Cipher.getInstance("RSA/None/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
String message = "hello world";
byte[] messageCrypte = cipher.doFinal(message.getBytes());

Le client quant à lui déchiffre comme cela :
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
 
//Coté client langage C
 
RSA * rsa;
const char *encrypt,*decrypt;
 
//generation de la paire de clés RSA
rsa = RSA_generate_key(1024,65537,NULL,NULL);
 
/*
récuperation du message du serveur
grace à un web-service
*/
 
//dechiffrement du message
encrypt = (char*)malloc(RSA_size(rsa));
decrypt = (char*)malloc(RSA_size(rsa));
int error = RSA_private_decrypt(RSA_size(rsa),(unsigned char *)encrypt,(unsigned char *)decrypt,rsa,RSA_NO_PADDING);
Je n'ai pas d'erreurs, cependant, le message déchiffré ne correspond pas au message d'origine.

Ai-je oublié quelque chose ?