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
e giustamento ho modificato il metodo cod in questo modo nella classe rsacodice: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(); } }
il problema è che mi dà un java.lang.NullpointerException sulla seguente riga della classe Maincodice: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
sbaglio sicuramente a passare l'utente perchè prima lo prendeva in questo modocodice:rsa.codifica(utente, pdf);
ragazzi cosa sbaglio ps il metodo decod ancora non lo modifico perchè vorrei prima riuscire a farmi codificare il filecodice: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
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

Rispondi quotando