Convertir un String en [] byte et l' inverse

Résolu
safia_Y Messages postés 30 Statut Membre -  
sohaibamira Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je veut faire une petite application client/serveur en java ,la communication entre le client et le serveur doit être sécurisée.
je suit cette démarche :
un client demande une connexion au serveur ,
le serveur génère une paire de clé - en utilisant rsa- , et envoie au client la clé public
le client génère une clé de session pour le chiffrement de donnée , if chiffre la clé de session par la clé public du serveur, et renvoi la clé de session chiffrée au serveur, ce dernier la déchiffrer en utilisant sa clé privée
le probleme est le suivant

au niveau du client:
byte[] encrypted = rsa.encrypt(clé_session.getBytes()); // ceci me donne [B@35f03691
j'ai envoyé  encrypted.toString() par socket au serveur

le serveur recupere cette valeur : [B@35f03691 mais sous forme de string
je veut la converti en tableau de byte pour la passer comme param de fonction de dechiffrement
 byte[] Todecrypt=clé_recu.getBytes(); // cela me donne : [B@67ce85c4  qui est diff/rent de la valeur recu comme string 

recu par socket: [B@35f03691 !=[B@67ce85c4
est donc le dechffrement de cette valeur ne donne plus la cle de session réelle

merci pour votre aide

3 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Si tu as :
    byte[] tab;
    Tu peux faire :
    String str = new String(tab);
    Et dans l'autre sens :
    tab = str.getBytes();
    La confiance n'exclut pas le contrôle
    7
    1. safia_Y Messages postés 30 Statut Membre
       
      Merci pour votre réponse
      le problème reste toujours au niveau du serveur
      je peut envoyer que des string par les socket
      ce tab de type byte sera envoyer comme un string
      dans l'autre coté je veut recuperer le tab comme byte
      au niveau de client
      byte[] tab =[B@67ce85c4  
      socket.write(tab)// comme un string


      au niveau de serveur:
      String  str= socket.read()// str=[B@67ce85c4


      je veut un tab de type byte coté serveur tq
       tab=[B@67ce85c4

      str.getBytes()
      me donne une autre
      valeur = [B@35f03691
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Si tu as "[B@35f03691" c'est qu'à un moment donné tu as utilisé la méthode toString sur un byte[].

      Exemple :

      byte[] tab = {'t','e','s','t'};
      
      System.out.println(tab.toString());       // [B@13bde392
      System.out.println(new String(tab));      // test
      System.out.println(Arrays.toString(tab)); // [116,101,115,116]

      Et si tu cumules les erreurs, au lieu de traiter le tableau, tu traites la valeur de toString, qui devient un tout autre tableau de bytes, et ensuite ça devient n'importe quoi...
      0
    3. safia_Y Messages postés 30 Statut Membre
       
      merci KX
      la méthode toString() est effectivement utilisé , puisque jài envoyé le tableau en socket , la socket travaille qu'avec des string, c'est comme System.out.print(tab)
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      sauf que System.out.print(tab) ne fait pas ce que tu veux, car c'est équivalent à System.out.print(tab.toString()), il faudrait plutôt faire System.out.print(new String(tab))...
      0
    5. safia_Y Messages postés 30 Statut Membre
       
      Merci pour l'info.
      0
  2. safia_Y Messages postés 30 Statut Membre
     
    Le probleme est resolu

    byte[]tab -> BigInteger en utilisant new BigInteger(tab)
    la valeur envoyé comme un string

    coté serveur

    byte [] tab =new BigInteger (str_clé_recu).toByteArray();
    0
    1. safia_Y Messages postés 30 Statut Membre
       
      c bon , merci
      0
      1. sohaibamira Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   > safia_Y Messages postés 30 Statut Membre
         
        Bonjour
        svp donner moi le code qui utiliser pour résoudre cette problème de convertir le string vers le byte.
        et merci
        0
  3. sohaibamira Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour,
    svp donner cette code de convertir le string en byte et l'inverce parce que j'ai besoin.
    et merci.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Il suffit de lire ma première réponse...
      0
    2. sohaibamira Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci
      mais le problème reste toujours au niveau du serveur
      je peut envoyer que des string par les socket
      ce tab de type byte sera envoyer comme un string
      dans l'autre coté je veut recuperer le tab comme byte
      au niveau de client
      svp donner le code de convertir le string en byte et l'inverce de safia_Y qui trouve la solution par utilise le Biginteger parce que j'ai besoin.
      et merci.
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      svp donner le code de convertir le string en byte et l'inverce de safia_Y qui trouve la solution par utilise le Biginteger parce que j'ai besoin.

      Il suffit de lire la réponse de safia_Y :
      https://forums.commentcamarche.net/forum/affich-26712861-convertir-un-string-en-byte-et-l-inverse#4

      Mais je pense que c'est une transformation inutile, les sockets transfère des bytes, peu importe ce qu'ils contiennent, donc faire String ↔ byte[] c'est normal, mais faire String ↔ BigInteger ↔ byte[] c'est plus compliqué pour rien.
      0
      1. sohaibamira Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 19031 Statut Modérateur
         
        mais j'ai besoin de sauvegarder cette byte en string dans la base de donnée mysql
        0