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!
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!