ragazzi per favore aiutatemi perchè sono ad un passo dalla pazzia
ho trovato girovagando in rete un software di codifica rsa scritto da piero tofy
il software è composto dalle seguenti classi
che trovate al seguente link

eccolo

il software funziona perfettamente solo che il problema è che ha un interfaccia grafica e a me non serve perchè deve fare tutto in automatico e quindi ho eliminato la classe RSACoderGui e ho creato una classe Main in questo modo
codice:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.security.*;
import java.util.Properties;
import java.io.*;
public class Main {
	private RSA rsa;
	private UsersPublicKeys upk;
	private Object[] users;
	private PrivateKey prk;
	private PublicKey puk;
	private JList lista;
	protected static Properties keystore;
public Main() throws NoSuchAlgorithmException, IOException{
	upk = new UsersPublicKeys();
	users = upk.getUsers();
	esecuzione();


 }
/**
 * Metodo per salvare le chiavi

 * 
 * @param prk Chiave privata
 * @param puk Chiave pubblica
 * @throws IOException
 * @throws NoSuchAlgorithmException
 */
private void saveKeys(PrivateKey prk, PublicKey puk) throws IOException, NoSuchAlgorithmException {
	byte[] prkBytes = prk.getEncoded();
	byte[] pukBytes = puk.getEncoded();
	String password = null;
	
	if(!new File("MyKeys").exists()) {
		new File("./MyKeys/").mkdir();
	}
	
	FileOutputStream fos = new FileOutputStream("./MyKeys/MyPublic");
	fos.write(pukBytes);
	fos.close();
	
	MessageDigest md = MessageDigest.getInstance("MD5");
	
	do {
		password = JOptionPane.showInputDialog(this, "Inserire password per chiave privata");
		} while(password == null || password.equals(""));
	
	fos = new FileOutputStream("./MyKeys/MyKeyStore");
	fos.write(md.digest(password.getBytes()));
	fos.close();
	
	fos = new FileOutputStream("./MyKeys/MyPrivate");
	fos.write(prkBytes);
	fos.close();
	
}
public void esecuzione() throws NoSuchAlgorithmException, IOException{
	RSA rs = new RSA();
	rs.createKeys();
	System.out.println("Chiavi create");
	PrivateKey prk = rs.getPrivate();
	PublicKey puk = rs.getPublic();
	saveKeys(prk, puk);
	String user;
	do {
		user = JOptionPane.showInputDialog(this, "Inserire nome utente");
		} while(user == null || user.equals(""));
	System.out.println("Sto selezionando la chiave pubblica");
    File chiavepubblica= new File("MyKeys/MyPublic");
    System.out.println(" chiave pubblica selezionata correttamente");
	//associo all'unse la sua rispettiva chiave pubblica
    upk.addPublicKey(user, chiavepubblica);
    File pdf = new File("c:/prova.txt");
    System.out.println("ci sono");
    String utente=user;
    if(utente == null) {
	System.out.println( "Non hai scelto nessun utente");
	} else {
   System.out.println(utente);
	rsa.codifica(utente, pdf);
	}
		}
	


public static void main(String[]arg) throws NoSuchAlgorithmException, IOException{
	new Main();
}
}
e giustamento ho modificato il metodo cod in questo modo nella classe rsa
codice:
public class RSA {
	protected PublicKey puk;
	protected PrivateKey prk;
	protected Cipher c;
	protected FileInputStream keyReader;
	protected DataOutputStream out;
	protected UsersPublicKeys upk;
	protected ByteArrayOutputStream baos;
	protected Blowfish blowfish;
	protected IvParameterSpec spec;
	protected KeyFactory kf;
	protected SecureRandom random;
	protected FileInputStream sourceReader;
	protected FileInputStream storeReader;
	protected DataInputStream dis;
	protected Runnable cod;
	protected Runnable decod;
	protected String user;
	protected File sorgente;

	/**
	 * Costruttore
	 */
	public RSA() {
		upk = new UsersPublicKeys();
		blowfish = new Blowfish();
		
	}
			public void cod() {
				try {
				keyReader = new FileInputStream(upk.getPublicFile(user));
				sourceReader = new FileInputStream(sorgente);
				blowfish.createKey();
				out = new DataOutputStream(new FileOutputStream(sorgente.toString()+ ".cod"));
				int i = 0;
				baos = new ByteArrayOutputStream();
					while((i = keyReader.read()) > -1) {
						baos.write(i);
					}
					baos.close();
				X509EncodedKeySpec ks = new X509EncodedKeySpec(baos.toByteArray());
				kf = KeyFactory.getInstance("RSA");
				puk = kf.generatePublic(ks);
				c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
				c.init(Cipher.ENCRYPT_MODE, puk);
				byte[] encoded = c.doFinal(blowfish.getKey());
				out.writeInt(encoded.length);
				out.write(encoded);
				random = new SecureRandom();
				byte[] iv = new byte[8];
				random.nextBytes(iv);
				out.write(iv);
				spec = new IvParameterSpec(iv);
				blowfish.codifica(spec, out, sourceReader);
				} catch(Exception e) {
					e.printStackTrace();
				}
			
........ecc
il problema è che mi dà un java.lang.NullpointerException sulla seguente riga della classe Main
codice:
rsa.codifica(utente, pdf);
sbaglio sicuramente a passare l'utente perchè prima lo prendeva in questo modo
codice:
String utente = lista.getSelectedValue() == null ? null:lista.getSelectedValue().toString();
            if(utente == null) {
                JOptionPane.showMessageDialog(this, "Non hai selezionato nessun utente", "Attenzione", JOptionPane.WARNING_MESSAGE);
            } else {
            JFileChooser jfc = new JFileChooser();
            int result = jfc.showOpenDialog(this);
            switch(result) {
            case JFileChooser.APPROVE_OPTION:
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        process.setText("Sto codificando");
                        jpb.setValue(50);
                    }
                });
                        rsa.codifica(utente, jfc.getSelectedFile()); 
.....ecc
ragazzi cosa sbaglio ps il metodo decod ancora non lo modifico perchè vorrei prima riuscire a farmi codificare il file
vi prego aiutatemi perchè ho un esame all'uni tra 2 giorni e veramente non sò più come fare
sono 10 giorni che ci perdo la testa
conto su di voi