Convertir un String en [] byte et l' inverse

Résolu
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   -  
sohaibamira Messages postés 9 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




A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour l'info.
0
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
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
baladur13 Messages postés 47801 Date d'inscription   Statut Modérateur Dernière intervention   13 688
 
0
safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
c bon , merci
0
sohaibamira Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   > safia_Y Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour
svp donner moi le code qui utiliser pour résoudre cette problème de convertir le string vers le byte.
et merci
0
sohaibamira Messages postés 9 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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il suffit de lire ma première réponse...
0
sohaibamira Messages postés 9 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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
sohaibamira Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
mais j'ai besoin de sauvegarder cette byte en string dans la base de donnée mysql
0