Convertir un String en [] byte et l' inverse

Résolu/Fermé
safia_Y Messages postés 24 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012 - 20 déc. 2012 à 21:15
sohaibamira Messages postés 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 12 mai 2016 - 12 mai 2016 à 17:43
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 20/12/2012 à 21:55
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 samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
Modifié par safia_Y le 20/12/2012 à 22:19
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
20 déc. 2012 à 22:32
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 samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
20 déc. 2012 à 22:44
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
20 déc. 2012 à 23:01
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 samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
20 déc. 2012 à 23:07
Merci pour l'info.
0
safia_Y Messages postés 24 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
Modifié par safia_Y le 20/12/2012 à 22:44
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 46397 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 26 avril 2024 13 222
20 déc. 2012 à 23:07
0
safia_Y Messages postés 24 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
20 déc. 2012 à 23:10
c bon , merci
0
sohaibamira Messages postés 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 12 mai 2016 > safia_Y Messages postés 24 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012
11 mai 2016 à 19:57
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 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 12 mai 2016
11 mai 2016 à 01:32
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 mai 2016 à 08:59
Il suffit de lire ma première réponse...
0
sohaibamira Messages postés 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 12 mai 2016
11 mai 2016 à 19:55
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 mai 2016 à 20:02
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 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 12 mai 2016 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
12 mai 2016 à 17:43
mais j'ai besoin de sauvegarder cette byte en string dans la base de donnée mysql
0