[JaVa] un piccolo rompicapo!

pinkmoon

Nuovo Utente
14 Giu 2007
1
1
0
Salve a tutti!
Volevo esporvi il seguente problema.

Ho un'applicazione client e una server per l'autenticazione, devo fare in modo che la password non viaggi in chiaro, senza però utilizzare il package security di java.

Il procedimento in breve è il seguente :

Il server mi invia una stringa CASUALE di 8 caratteri .. str1;
Il client invia al server una stringa str3 (sempre di 8 caratteri) ottenuta come combinazione di str2 (altra stringa di 8 caratteri in possesso del client, sarebbe una password) e di str1.

Ricapitolando : il client riceve str1 (stringa casuale di 8 caratteri dal server) , la combina con str2 facendo uno xor carattere per carattere... ottengo str3:


StringBuffer temp = new StringBuffer();
for (int i= 0; i<8;i++){
temp.append( (char)(str1.charAt(i)^str2.charAt(i)) );
}

Poi converto in stringa perchè devo inviarlo su un Printer che nn accetta stringbuffer ma solo string

String str3 = new String (temp.toString());
os.println(str3);

Ho inviato str3 che è lo xor di str1 e str2 ok!


Ora dal lato server ricevo str3, devo risalire alla password (per verificarla) ossia a str2!
Ho pensato : semplice rifaccio lo xor!



StringBuffer temp = new StringBuffer();
for (int i= 0; i<8;i++){
temp.append( (char)(str3.charAt(i)^str1.charAt(i)) );
}


String str2 = new String (temp.toString());

Infatti ottengo la str2 originaria.

Il problema però è il seguente : molte volte non ottengo precisamente str2 ma una stringa troncata ...

es : stringa del client str2 = abcd
stringa ricavata dal server con lo xor str2 = a oppure abc oppure completa!

Ho pensato si tratti del casting che faccio in entrambi i casi, in quanto lo xor tra 2 caratteri dovrebbe restituire un intero (4byte) a fronte del casting char(2byte) che faccio. Non saprei, così funziona ma non sempre.
Avete qualche idea "più pulita" della mia? Ve ne sarei grato!
 
  • Like
Reactions: ottofonsuppost