Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Algoritmo di cifratura

  1. #1
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684

    Algoritmo di cifratura

    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

    Oppa

  2. #2
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    Nessuna ideaa....uffa!!

    Oppa

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.