|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 3
|
[JaVa] un piccolo rompicapo!
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! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Un protocollo di questo tipo non è sicuro...all'avversario basta fare l'xor fra str3 e str1... Devi usare un hash di str2+str1...ma hai detto che non puoi usare la libreria java.security... La cosa più semplice che mi viene in mente è un cifrario a passata multipla sfruttando la stringa casuale come chiave del cifrario...ma ovviamente non è un algoritmo sicuro, sicuramente più sicuro dello xor... Ultima modifica di cionci : 14-06-2007 alle 09:54. |
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2007
Messaggi: 3
|
Forse ho capito il problema!!!!! (ma non mi vengono soluzioni
Probabilmente tutto parte da come sono memorizzati i caratteri in una stringa. Vi è memorizzato il carattere o il codice del carattere? Cioè se str1 = "ciao" ... in effetti vi è memorizzato "\u001 \u002....." ? (ho messo codici a caso ma spero mi sia spiegato cosa voglio intendere) Perchè credo che se vi sono memorizzati effettivamente i caratteri "c","i" ecc nella stringbuffer finale ossia temp capiti ke la somma di 2 caratteri dia come risultato il carattere backspace....e il carattere venga perso! e quindi è normale che il server non ricostruisca del tutto la stringa. Forse ho confuso tutto.... troppo tempo sullo stesso codice, ho perso quelle poche sicurezze che avevo |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
se non ricordo male e ho capito cosa vuoi dire, i caratteri seguono la codifica della tabella ascii : http://it.wikipedia.org/wiki/Ascii
quindi l'esempio che dici tu col backspace potrebbe anche essere "vero". comunque un metodo di codifica alternativa ci sarebbe: converti in binario la password con il codice ascii(c'è proprio una funzione se non ricordo male) e poi in decimale, fai una operazione matematic "complessa" con il numero casuale(o anche la stringa, fai lo stesso procedimento)arrivato dal server e poi la invii al server. stupido secondo voi???
__________________
My gaming placement |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:37.




















