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:
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)
{
}
}
In pratica non riesco a "cifrare" il testo già "cifrato"..qualcuno sa come aiutarmi???
Grazie mille