Salve a tutti..sto realizzando, a scopo didattico, un applet che faccia vedere come funziona un algoritmo di cifratura a matrice. In pratica l'utente inserisce un testo e una chiave e clicca sul bottone cifra. A questo punto viene visualizzata una matrice con la chiave nella prima riga e il testo disposto su n righe in base alla lunghezza della chiave.
es.:
- testo: ciao mamma
- chiave: casa
- risultato:
casa
ciao
mamm
a
Il testo "cifrato" si avrà prendendo le colonne della matrice in ordine alfabatico rispetto alla chiave:
(a)om (a)ia (c)cma (s)am -> omiacmaam
Fino qui nessun problema..ora dovrei fare in modo che l'utente cliccando "cifra ancora" possa inserire nuovamente una chiave e cifrare il testo già cifrato. Quindi risulterà:
- testo: omiacmaam
- chiave: pippo
- risultato:
pippo
omiac
maam
Il codice che ho scritto è il seguente:
In pratica non riesco a "cifrare" il testo già "cifrato"..qualcuno sa come aiutarmi???codice:import java.awt.*; import javax.swing.*; import java.util.*; public class Matrice extends javax.swing.JApplet implements Runnable { public JTextField TestoOriginale; public JTextField Chiave; private JLabel T1; private JLabel T2; private JLabel T3; private JLabel T4; private JButton CreaMatrice; private JButton CifraAncora; private JPanel pannelloText; private JPanel tabella; private JPanel tabella1; private JTextField[][] matrice1; private JTextField[] matrice2; public void disegnapannelli() { tabella = new JPanel(); tabella1 = new JPanel(); pannelloText = new JPanel(); getContentPane().setLayout(new GridLayout(3,0)); pannelloText.setLayout(new GridLayout(7,0)); pannelloText.add(T1); pannelloText.add(TestoOriginale); pannelloText.add(T2); pannelloText.add(Chiave); pannelloText.add(CreaMatrice); pannelloText.add(CifraAncora); getContentPane().add(pannelloText); } public void init() { TestoOriginale = new JTextField(); Chiave = new JTextField(); T1 = new javax.swing.JLabel(); T1.setText(" Inserire il testo da cifrare:"); T2 = new javax.swing.JLabel(); T2.setText(" Inserisci la chiave:"); T3 = new javax.swing.JLabel(); T3.setText(" Testo cifrato:"); T4 = new javax.swing.JLabel(); T4.setText(" Matrice associata: "); CreaMatrice = new JButton(); CreaMatrice.setText("Cifra"); CreaMatrice.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { creaMatr(evt); } }); CifraAncora = new JButton(); CifraAncora.setText("Cifra ancora"); CifraAncora.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cifnew(evt); } }); disegnapannelli(); } public void run() { String Testo = TestoOriginale.getText(); String TestoOriginale1 = Testo.replace(" ", ""); int x = Chiave.getText().length(); int y = TestoOriginale1.length(); int y1 = Testo.length(); int Nchar = 0; int ind =0; String totale = Chiave.getText() + TestoOriginale1; int k = x + y; int h = x + y1; int righe = 0; for (int NumeroRighe = 0 ; NumeroRighe < y ; NumeroRighe++) { int controllo = NumeroRighe * x; if (controllo >= y) { righe = NumeroRighe+1; break; } } matrice1 = new JTextField[righe][x]; matrice2 = new JTextField[righe*x]; tabella1.add(T3); for (int i = 0; i < righe; i++) { for (int j = 0; j < x; j++) { if (Nchar < k) { matrice1[i][j] = new JTextField(); matrice1[i][j].setText (Character.toString(totale.charAt(Nchar))); matrice1[i][j].setEditable(false); matrice1[i][j].setHorizontalAlignment(javax.swing.JTextField.CENTER); Nchar++; if(i == 0) matrice1[i][j].setBackground(Color.GREEN); } else { matrice1[i][j] = new JTextField(); matrice1[i][j].setText (""); matrice1[i][j].setEditable(false); matrice1[i][j].setHorizontalAlignment(javax.swing.JTextField.CENTER); Nchar++; if(i == 0) matrice1[i][j].setBackground(Color.GREEN); } tabella.setLayout(new GridLayout(righe,x)); tabella.add(matrice1[i][j]); } } String s = Chiave.getText(); char[] text = new char[s.length()]; text = s.toCharArray(); Arrays.sort(text); pannelloText.add(T4); for (int i = 0; i < x; i++) { String c1 = Character.toString(text[i]); for (int n = 0; n < x; n ++) { String c2 = matrice1[0][n].getText(); if(c1.equals(c2)) { for (int p = 1; p < righe; p++) { if (!(matrice1[p][n].getText().equals(""))) { matrice2[ind] = new JTextField(); matrice2[ind].setText(matrice1[p][n].getText()); matrice2[ind].setEditable(false); tabella1.add(matrice2[ind]); } ind ++; } } } } getContentPane().add(tabella); getContentPane().add(tabella1); setSize(500,501); } public void creaMatr(java.awt.event.ActionEvent evt) { Thread t = new Thread(this); t.start(); } public void cifnew(java.awt.event.ActionEvent evt) { } }
Grazie mille
![]()

Oppa
Rispondi quotando
