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 :

Cryptage asymétrique en java


Sujet :

Sécurité Java

  1. #1
    Nouveau membre du Club
    Cryptage asymétrique en java
    Bonjour,
    Je souhaite crypter un message de façon asymétrique en java.
    J'utilise le provider Cryptix et l'edi NetBeans 5.0

    Donc pour cela:
    CLIENT
    -Le client génère une clé secrete
    -Crypte le message avec la clé secrete
    -Crypte la clé secrete avec la clé publique du serveur
    -Ils envoit a la la fois la clé secrete crypter et le message au serveur.

    SERVEUR
    -Le serveur génère une clé public et une clé privée
    -Récupère la clé crypté du client et le texte crypté
    -Décrypte la clé crypté avec sa clé privé
    -Décrypte le message avec la clé qu'il vient de décrypter

    Dans l'exemple de mon prof (pour le cryptage symétrique), ils envoit les données sous formes de tableau de bytes. Donc pour le cryptage asymétrique:

    Coté client, on a:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Cryptage du message avec la cle
    byte[] msgCrypter = crypterAvecCleSession("Hello world!");
     
    //Cryptage de la cle avec la cle publique
    byte[] cleCrypter = crypterCleAvecClePubliqueDuServeur();
     
    //Envoit du message et de la clé
    dos.write(msgCrypter);
    dos.flush();
    dos.close();


    De l'autre coté (serveur), je fais un:


    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
    byte b;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] texteCrypté;
     
    try 
    {
           while(true)
           {
                 System.out.println("et hop!");
                 b=dis.readByte();
                 baos.write(b);
           }
     
    }
    catch(EOFException e)
    {
            texteCrypté = baos.toByteArray();
    }



    Ca marche mais:
    1) Existe il une autre méthode que de forcer l'exception EOFException en fermant le dataoutputstream du client après avoir envoyer le tableau de bytes du message...parce qu'il faut ensuite envoyer le deuxième tableau de bytes (la clé crypté!)

    2) Une fois que je récupère la clé crypté sous forme de byte. Je l'a fait décrypter dans le serveur avec sa clé privée:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cipher chiffrement = Cipher.getInstance("RSA","Cryptix");
    chiffrement.initDecrypt(clePrive);
    byte[] CleCrypterB = chiffrement.doFinal(cleCrypter);


    Mais j'obtient un tableau de bytes en final...hors j'aimerais un objet SecretKey. Hors impossible de convertir un tableau de byte en clé secrete


    Help me!

  2. #2
    Membre expérimenté
    Au lieu d'enregistrer ta clé sous forme de tableau de bytes, essaie d'enregistrer les paramètres qui ont permis de créer ta clé et avec ces paramètres tu la recrées coté déchiffrement. Ca je l'ai déja fait donc c'est sur que ca marche ^^

    Aprés je me demande si c'est pas plus mal de sérialiser ta clé coté chiffrement et la désérialiser de l'autre coté, ce qui t'évites d'avoir a la recalculer, mais la j'ai pas testé.

  3. #3
    Futur Membre du Club
    bonjour, peux tu me donner votre code complet?