IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Chiffrement AES entre Java et Objective-C


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ingénieur d'études
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par défaut Chiffrement AES entre Java et Objective-C
    Bonjour,

    J'ai un leger soucis, je dois faire communiquer un client mobile (ios) avec un serveur JAVA par communications chiffrées. J'utilises pour cela une clé partagée AES.

    Mon problème est le suivant : le client chiffre le message, mais le serveur n'arrive pas à le dechiffrer.

    Ils ont pourtant la même clé, le même mode "EBC", et le même padding PKCS7.

    Voici le client IOS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char keyPtr[kCCKeySizeAES128+1];
    keyPtr = 1234567890123456;
     
    CCCryptorStatus ret = CCCrypt(kCCEncrypt,
                                      kCCAlgorithmAES128,
                                      kCCOptionECBMode+kCCOptionPKCS7Padding,
                                      keyPtr,
                                      kCCKeySizeAES128,
                                      NULL,
                                      plainBytes, sizeof(plainBytes),
                                      buffer, bufferSize,
                                      &bytesEncrypted);
    et le serveur JAVA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    byte[] key = "1234567890123456".getBytes();
    SecretKey sk = new SecretKeySpec(key,"AES");
    Cipher decrypt = Cipher.getInstance("AES/ECB/PKCS7Padding");
    decrypt.init(Cipher.DECRYPT_MODE,sk);
    messageDecrypté = decrypt.doFinal(message);
    Y a t-il un problème dans ma programmation ??

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par olivpepette Voir le message
    Y a t-il un problème dans ma programmation ??
    plusieurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char keyPtr[kCCKeySizeAES128+1];
    keyPtr = 1234567890123456;
    ce n'est pas ainsi qu'on initialise un tableau de char en C.
    (et d'ailleurs ce code ne compile même pas…)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    keyPtr,
    kCCKeySizeAES128,
    CCCrypt attend la longueur réelle de la clé : pas la longueur maximum supportée…
    donc "strlen(keyPtr)" …

    et on peut s'attendre à la même erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plainBytes, sizeof(plainBytes),
    c'est sans doute "strlen(plainBytes)" qu'il faudrait là aussi
    mais comme on ne voit pas sa déclaration…

  3. #3
    Membre averti
    Homme Profil pro
    ingénieur d'études
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par défaut
    Merci de ta réponse rapide,

    Cependant, le problème semble ne pas venir de là. Le problème que j'ai est que mon serveur (java), ne décrypte pas bien le message crypté par le client(objective-c).

    L'erreur qui apparait est : "last block incomplete in decryption".

    d'où cela peut-il venir ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par olivpepette Voir le message
    Merci de ta réponse rapide,

    Cependant, le problème semble ne pas venir de là. Le problème que j'ai est que mon serveur (java), ne décrypte pas bien le message crypté par le client(objective-c).

    L'erreur qui apparait est : "last block incomplete in decryption".

    d'où cela peut-il venir ?
    si la clé n'est pas juste, si la longueur du bloc chiffré n'est pas correcte, …
    comment voulez-vous que le déchiffrage avec la bonne clé fonctionne ?

    (sans parler de ce que vous ne montrez pas : comment vous transmettez les données au serveur… si vous faites une requête HTTP : est-ce que les données sont bien "URL encoded" pour une requête Web…)

  5. #5
    Membre averti
    Homme Profil pro
    ingénieur d'études
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    si la clé n'est pas juste, si la longueur du bloc chiffré n'est pas correcte, …
    comment voulez-vous que le déchiffrage avec la bonne clé fonctionne ?

    (sans parler de ce que vous ne montrez pas : comment vous transmettez les données au serveur… si vous faites une requête HTTP : est-ce que les données sont bien "URL encoded" pour une requête Web…)
    Au niveau de la clé, il n'y a pas de problèmes, c'est la même des deux cotés (une clé de 16 octets = 128 bits).

    Pour la transmission des données au serveur, je passes par un message SOAP, et je fais d'abord un encodage en base64.

    Je vais regarder au niveau de la longueur du bloc chiffré si il n'y a pas de problèmes.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par olivpepette Voir le message
    Au niveau de la clé, il n'y a pas de problèmes, c'est la même des deux cotés (une clé de 16 octets = 128 bits).
    Non : justement le code que vous postez montre sans aucun doute que la clé n'est pas la même !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    keyPtr = 1234567890123456;
    ce n'est pas la même chose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy(keyPtr, "1234567890123456") ;
    ou alors postez le vrai code COMPLET (avec la déclaration et l'initialisation de TOUTES les variables utilisées dans l'appel à CCCrypt) que vous compilez : parce que ce vous avez mis ici ne compile même pas… donc on est en droit de se demander ce que vous exécutez réellement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Decryptage fichier clé AES entre PHP et Java
    Par Gaspard22 dans le forum Sécurité
    Réponses: 0
    Dernier message: 13/04/2015, 17h24
  2. java.lang.Object javax.media.Buffer.getData()
    Par keil dans le forum Multimédia
    Réponses: 3
    Dernier message: 28/07/2011, 13h41
  3. Dialogue entre Java et Objective C
    Par Battant dans le forum Général Java
    Réponses: 4
    Dernier message: 04/04/2011, 11h48
  4. [Eclipse 3.1]conflict de path entre java Eclipse et Oracle
    Par makohsarah dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 10/04/2005, 01h07
  5. [Débutant] java.lang.object
    Par bonnefr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo