sto facendo adesso una chat con canale sicuro, utilizzo RSA praticamente genero una chiave pubblica del client che la invierà al server, il quale a sua volta creerà la sua chiave pubblica e la invierà al client. Sia i server sia i client naturalmetne avranno anche la loro chiave privata, a questo punto i dati vengono cirfati con la chiave pubblica del destinatario e il destinatario li decodifica con la sua privata che non è stata mandata per la rete per evitare intercettazioni(se uno prende la pubblica può solo codificare).

Le chiavi le generi così:

codice:
import javax.crypto.*;

import java.security.*;
import java.security.spec.*;
...
	private KeyPairGenerator kpg;
	private KeyPair kp;
	private PublicKey serverPublicKey;
	private PublicKey myPublicKey;
        ... 
	private void doSafeTheChannel() {
		try {
	kpg = KeyPairGenerator.getInstance("RSA");
	kpg.initialize(1024);
	kp = kpg.generateKeyPair();
	myPublicKey = kp.getPublic();
	bos.write("/KEY|"+myPublicKey.getEncoded());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
Per ripristinare la chiave codificata(con getEncode) devi usare la classe

X509EncodedKeySpec per la pubblica

Questo con il JCE di Sun standard(in teoria dal jdk 1.3 in poi c'è RSA, io uso la 5) quindi presente nella documentazione.