Ciao a tutti,
vi posto il main del codice che ho realizzato.
Esso funziona, ho il problema di come farlo eseguire in rete, ovvero il codice dovrebbe essere su un server, e mediante una comunicazione TCP, il client dovrebbe immettere i dati richiesti ed ottenerne in uscita.
Ho già preso delle dispense sulla comunicazione Client/Server TCP, ma ho il problema di non riuscire a farle funzionare(adattare x far funzionare il mio algoritmo in rete). 
Questo è il mio codice Java:
codice:
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
import java.net.*;
import java.math.BigInteger;
import javax.swing.JOptionPane;
public class RSA {
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("ALGORITMO RSA PER LA CODIFICA/DECODIFICA MESSAGGI");
Scanner in = new Scanner(System.in);
ArrayList<Integer> valcarattere=new ArrayList();
ArrayList<Long> valcodificato=new ArrayList();
boolean trovatop=false, trovatoq=false;
int certainty=977,mex=0;
long p,q,n,e,d;
p=0;q=0;;n=0;e=0;d=0;
/*Chiedo di inserire p,q e controllo se sono primi, ed itero la richiesta di inserimento finchè non
sono entrambi primi, chiedendo il solo numero non primo se già ne abbiamo immesso uno primo*/
while(trovatop!=true || trovatoq!=true)
{
if(trovatoq!=true && trovatop!=true)
{
System.out.println("Inserisci un numero primo 'p' :");
String ps=in.next();
BigInteger p11=new BigInteger(ps);
if(p11.isProbablePrime(certainty))
{
p=p11.longValueExact();
trovatop=true;
}
System.out.println("Inserisci un numero primo 'q' :");
String qs=in.next();
BigInteger q11=new BigInteger(qs);
if(q11.isProbablePrime(certainty))
{
q=q11.longValueExact();
trovatoq=true;
}
}else if(trovatop!=true && trovatoq!=false)
{
System.out.println("Inserisci un numero primo 'p' :");
String ps=in.next();
BigInteger p11=new BigInteger(ps);
if(p11.isProbablePrime(certainty))
{
p=p11.longValueExact();
trovatop=true;
}
}else if(trovatop!=false && trovatoq!=true)
{
System.out.println("Inserisci un numero primo 'q' :");
String qs=in.next();
BigInteger q11=new BigInteger(qs);
if(q11.isProbablePrime(certainty))
{
q=q11.longValueExact();
trovatop=true;
}
}
}
Chiave key=new Chiave(p,q);
Messaggio m=new Messaggio();
n=key.getN();
e=key.CalcolaE();
d=key.CalcolaD();
System.out.println("La chiave pubblica è la coppia ("+n+","+e+")");
System.out.println("La chiave privata è la coppia ("+n+","+d+")");
System.out.println("Immetti 1 per codificare il messaggio, 2 per decodificarlo!");
int scelta=in.nextInt();
if(scelta==1)
{
mex=0;
String s=JOptionPane.showInputDialog("Immetti il messaggio da codificare!");
for(int i=0;i<s.length();i++)
{
mex=s.charAt(i);
valcarattere.add(mex);
}
for(int i=0;i<valcarattere.size();i++)
{
long c=m.Codifica(n, e, valcarattere.get(i));
valcodificato.add(c);
}
System.out.print("Messaggio codificato:");
for(int i=0;i<valcodificato.size();i++)
{
System.out.print((char)(valcodificato.get(i)+33));
}
}else if(scelta==2)
{
mex=0;
String s=JOptionPane.showInputDialog("Immetti il messaggio da decodificare!");
for(int i=0;i<s.length();i++)
{
mex=(s.charAt(i)-33);
valcarattere.add(mex);
}
for(int i=0;i<valcarattere.size();i++)
{
long c=m.Codifica(n, d, valcarattere.get(i));
valcodificato.add(c);
}
System.out.print("Messaggio decodificato:");
for(int i=0;i<valcodificato.size();i++)
{
System.out.print((char)(valcodificato.get(i)+0));
}
}else { JOptionPane.showMessageDialog(null,"ERRORE....HAI IMMESSO UN VALORE NON CORRETTO");}
}
}
Grazie a tutti per l'aiuto!! 