Quote Originariamente inviata da Markus85 Visualizza il messaggio
out.write(cipher.doFinal(messaggio.getBytes())); riga 80

if(client.inviaRichiesta("Gio@falco85@ciao")) riga 121

a quanto pare sbaglio nel cifrare il messaggio
Beh, da una veloce verifica: inviaRichiesta non è invocato nel run del thread ma nel contesto del main, appena dopo la start(). La inizializzazione di cipher è verso la fine del run.
Nel momento in cui invochi inviaRichiesta e si arriva alla riga incriminata, non è affatto detto che cipher sia già stato assegnato.
E comunque anche se:

cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

fosse già eseguito, lo assegni nel contesto del tuo thread ma poi inviaRichiesta lo usa nel contesto del main-thread .... e non hai fatto nulla per garantire anche solo la "visibilità" della modifica a 'cipher'.
Quindi il tuo design è "dubbio".