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

Sécurité Java Discussion :

Problème de cryptage/décryptage RSA en Java


Sujet :

Sécurité Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Points : 115
    Points
    115
    Par défaut Problème de cryptage/décryptage RSA en Java
    Bonjour à tous,

    J'ai un code me permettant de crypter un tableau de byte à l'aide d'une clé RSA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] chumpData = new byte[CHUMP_SIZE];
    int position = 0;
    while(position < data.length) {
       System.arraycopy(data, position, chumpData, 0, Math.min(data.length-position, CHUMP_SIZE));
       byte[] codedChump = cipher.doFinal(chumpData);
       System.arraycopy(codedChump, 0, encryptData, position, Math.min(encryptData.length - position, CHUMP_SIZE));
       position += CHUMP_SIZE;
    }
    Et pour le décodage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] chumpData = new byte[CHUMP_SIZE];
    int position = 0;
    while(position < data.length) {
       System.arraycopy(data, position, chumpData, 0, Math.min(data.length-   position, CHUMP_SIZE));
       System.arraycopy(data, position, chumpData, 0, Math.min(data.length-position, CHUMP_SIZE));
       byte[] decodedChump = cipher.doFinal(chumpData);
       System.arraycopy(decodedChump, 0, decodedData, position, decodedChump.length);
       position += CHUMP_SIZE;
    }
    La boucle while sert à contourner le fait que RSA veut que les données ait une taille bien précise pour pouvoir être décodées. A la base, je ne les avais pas, mais ça ne fonctionnait pas non plus. Cipher voulait des données d'une taille de 53 octets précisément.


    Mais quand je veux décoder ce que je viens de coder, je récupère l'exception BadPaddingException avec le message Data must start with zero.

    Est-ce que quelqu'un pourrait éclairer ma lanterne ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Points : 115
    Points
    115
    Par défaut
    J'ai essayé aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Cipher cipher = Cipher.getInstance(CIPHER_TRANSFO);
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    ByteArrayInputStream inStream = new ByteArrayInputStream(data);
    CipherInputStream cipherStream = new CipherInputStream(inStream, cipher);
    cipherStream.read(encryptData);

    et le décodage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Cipher cipher = Cipher.getInstance(CIPHER_TRANSFO);
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
    CipherInputStream stream = new CipherInputStream(inputStream, cipher);
    stream.read(decodedData);
    Et je n'ai plus l'exception, par contre, j'aimerais bien avoir l'explication pour m'endormir moins bête

    EDIT: En fait, je n'ai plus l'exception, mais ca ne code pas... ca me rend 0 pour chaque byte.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 130
    Points : 115
    Points
    115
    Par défaut
    Bon j'ai trouvé mon erreur grâce à http://forums.sun.com/thread.jspa?messageID=10660339�

    Alors en fait: RSA ne sait encoder que des messages qui ne font pas plus que la taille de la clé utilisée. Le mode de padding par défaut étant PKCS1Padding, il a besoin d'un minimum de 11 byte de padding.
    Du coup, pour encoder, je dois découper ma donnée en bouts de taille "Taille de la clé - padding minimum", pour que ça marche.

    CipherInputStream, quant à lui, me rend que des zéro car c'est sa manière de dire qu'un erreur est arrivée.


    EDIT: Encore mieux. Je génère une clé AES que j'encode via RSA. Et ensuite je code mes données avec AES. (sur ce forum, ya un gars qui a fait un code dans le genre, mais je ne trouve plus le post).

    Voilà, et merci de m'avoir lu

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

Discussions similaires

  1. Cryptage / Décryptage ( RSA-MD2 )
    Par Shirase_Akira dans le forum Langage
    Réponses: 0
    Dernier message: 17/12/2012, 13h24
  2. Problème de cryptage/décryptage DES
    Par Kaneda Shotaro dans le forum C#
    Réponses: 5
    Dernier message: 26/06/2011, 14h00
  3. Algorithme de cryptage décryptage RSA
    Par ISIL3EME dans le forum Sécurité
    Réponses: 4
    Dernier message: 26/07/2010, 15h22
  4. Cryptage/Décryptage compatible Java Linux
    Par pragmatique dans le forum Langage
    Réponses: 0
    Dernier message: 30/11/2009, 14h46
  5. RSA Cryptage/Décryptage des String
    Par khaledUSTHB dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/09/2008, 10h49

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