Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] Rsa coder

  1. #1

    [JAVA] Rsa coder

    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

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    tu dichiari l'oggetto rsa ma non lo inizializzi, quindi NullPointerException.
    nel metodo esecuzione invece di creare un nuovo oggetto RSA con nom rs inizializza l'oggetto di nome rsa.
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    nooooooooo non mi dire che ho fatto questa cazzzzzzzzzzz......... ora provo grazie mille cmq

  4. #4
    netarrow + che ringraziarti non so che dire... era un errore stupido lo so ma sai modifica qui per provare poi li e non me ne sono proprio accorto... grazie mille.... ti auguro una splendida giornata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.