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