2o Problema, encriptador con GUI

Iniciado por Debci, 15 Noviembre 2009, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

HOla a todos, antes encontré una clase que encriptaba texto  :o y le hice una gui, la cosa es que la gui cifra bien, pero no descifra!

Codigo de la gui:

Código (java) [Seleccionar]

package main;

/**
*
* @author debci
*/
import encriptador.*;
public class Main extends javax.swing.JFrame {
public static String contraseñaEncriptada;
    /** Creates new form Main */
    public Main() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        textoIntroducido = new javax.swing.JTextField();
        claveIntroducida = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        btnEncriptar = new javax.swing.JButton();
        contraseEncr = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        btnDesencriptar = new javax.swing.JButton();
        entradaHash = new javax.swing.JTextField();
        entradaClave = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        clavedesencriptada = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Encriptador Basico");

        jLabel1.setText("Introduzca el texto que desea cifrar:");

        jLabel2.setText("Introduzca la clave de cifrado:");

        btnEncriptar.setText("cifrar");
        btnEncriptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEncriptarActionPerformed(evt);
            }
        });

        contraseEncr.setText("Contraseña cifrada");
        contraseEncr.setToolTipText("Contraseña cifrada");

        jLabel3.setText("Contraseña cifrada:");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoIntroducido, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(claveIntroducida, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(contraseEncr)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 47, Short.MAX_VALUE)
                        .addComponent(btnEncriptar))
                    .addComponent(jLabel3))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(textoIntroducido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addGap(7, 7, 7)
                .addComponent(claveIntroducida, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEncriptar)
                    .addComponent(contraseEncr))
                .addContainerGap())
        );

        contraseEncr.getAccessibleContext().setAccessibleParent(this);

        jTabbedPane1.addTab("cifrar", jPanel1);

        btnDesencriptar.setText("descifrar");
        btnDesencriptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDesencriptarActionPerformed(evt);
            }
        });

        jLabel4.setText("Clave cifrada:");

        jLabel5.setText("Clave de descifrado:");

        jLabel6.setText("La clave descifrada es:");

        clavedesencriptada.setText("Clave descifrada");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel4)
                        .addContainerGap(167, Short.MAX_VALUE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(entradaHash, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                        .addGap(87, 87, 87))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel5)
                        .addContainerGap(124, Short.MAX_VALUE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(entradaClave, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                        .addGap(87, 87, 87))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addComponent(clavedesencriptada)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50, Short.MAX_VALUE)
                        .addComponent(btnDesencriptar))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel6)
                        .addContainerGap(108, Short.MAX_VALUE))))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(entradaHash, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(entradaClave, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel6)
                .addGap(7, 7, 7)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnDesencriptar)
                    .addComponent(clavedesencriptada))
                .addContainerGap())
        );

        jTabbedPane1.addTab("descifrar", jPanel2);

        jMenu1.setText("Archivo");
        jMenuBar1.add(jMenu1);

        jMenu2.setText("Acerca de...");
        jMenu2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenu2ActionPerformed(evt);
            }
        });

        jMenuItem1.setText("Ver creditos del programa");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem1);

        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 306, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING)
        );

        pack();
    }// </editor-fold>

    private void jMenu2ActionPerformed(java.awt.event.ActionEvent evt) {                                       
       
    }                                     

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        Acerca acerca = new Acerca();
        acerca.setVisible(true);
    }                                         

    private void btnEncriptarActionPerformed(java.awt.event.ActionEvent evt) {
        String palabraNormal = textoIntroducido.getText();
        String ClaveIntroducida = claveIntroducida.getText();
       

        encriptador encriptador = new encriptador();
        contraseñaEncriptada = encriptador.codificar(palabraNormal, ClaveIntroducida).trim();
        contraseEncr.setText(contraseñaEncriptada);
        contraseEncr.setVisible(true);

    }

    private void btnDesencriptarActionPerformed(java.awt.event.ActionEvent evt) {
        String hashIntroducido = entradaHash.getText();
        String claveDesencriptadora = entradaClave.getText();
        entradaHash.setText(contraseñaEncriptada);
        encriptador encriptador = new encriptador();
        String claveDesencriptadaLimpia = encriptador.decodificar(hashIntroducido);
        clavedesencriptada.setText(claveDesencriptadaLimpia);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Main().setVisible(true);
                contraseEncr.setVisible(false);
                clavedesencriptada.setVisible(false);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnDesencriptar;
    private javax.swing.JButton btnEncriptar;
    private javax.swing.JTextField claveIntroducida;
    private static javax.swing.JLabel clavedesencriptada;
    private static javax.swing.JLabel contraseEncr;
    private javax.swing.JTextField entradaClave;
    private javax.swing.JTextField entradaHash;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextField textoIntroducido;
    // End of variables declaration

}



Codigo de la clase encriptadora:


Código (java) [Seleccionar]
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
*
* @author debci
*/
public class encriptador {
//instance
    private String claveOriginal="";
    private String textoOriginal="";
    private String claveActual="";
    private char[][] matriz;
    //reader
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    //methods
    public String decodificar(String texto) {
        int repeticiones=0;
        int jSize= claveActual.length();
        while (repeticiones<jSize) {
            boolean cambio=false;
            int i=repeticiones;
            claveActual="";
            for (int j=0; j<jSize;j++)
                claveActual=claveActual+matriz[0][j];
            while ((!cambio)&&(i<jSize)) {
                    if (claveOriginal.charAt(repeticiones)==claveActual.charAt(i)){
                    modificarArreglo(i,repeticiones);
                    cambio=!cambio;
                }
                else
                    i++;
            }
            repeticiones++;
    }
    String output="";
    for (int i=1; i<matriz.length;i++)
        for (int j=0; j<matriz[0].length;j++)
            output=output + matriz[i][j];
    return output;
}
    public String codificar(String texto, String clave){
        claveOriginal=clave;
        textoOriginal=texto;
        int jSize= claveOriginal.length();
        int iSize= (textoOriginal.length()/jSize)+1;
        if ((textoOriginal.length()%jSize)!=0)
            iSize++;

        System.out.println("Filas :" + iSize + " Columnas: "+jSize);

        matriz= new char[iSize][jSize];
        int charPos=0;
        int keyPos=0;
        for (int i=0; i<claveOriginal.length();i++) {
            matriz[0][i]=claveOriginal.charAt(i);
        }
        for (int i=1; i<iSize;i++) {
            for (int j=0;j<jSize;j++) {
                try {
                    matriz[i][j]=textoOriginal.charAt(charPos);
                    charPos++;
                }
                catch (Exception e) {matriz[i][j]=' '; charPos++;}
            }
        }
        /*debug
        for (int i=0; i<iSize;i++) {
            for (int j=0; j<jSize;j++) {
                System.out.print(matriz[i][j]);
            }
        }
        */

        int repeticiones=0;
        while (repeticiones<jSize) {
            char[] filaCero= new char[jSize-repeticiones];
            for (int j=repeticiones; j<jSize; j++) {
                filaCero[j-repeticiones]=matriz[0][j];
            }
            int i=0;
            boolean cambio=false;
                    //tamaño de filaCero
            while ((i<jSize-repeticiones)&&(!cambio)){
                if (esElMenor(filaCero,filaCero[i])){
                    modificarArreglo(i+repeticiones,repeticiones);
                    cambio=!cambio;
                }
                i++;
            }
            repeticiones++;
        }
        /*debug
        for (int i=0; i<iSize;i++) {
            for (int j=0; j<jSize;j++) {
                System.out.print(matrizAuxiliar[i][j]);
            }
        }
        */
       String output="";
        for (int j=0; j<jSize;j++) {
            for (int i=0; i<iSize;i++) {
                if (i==0) claveActual=claveActual + matriz[i][j];
                output=output+matriz[i][j];
            }
        }
        return output;
        /*debug
        for (int j=0; j<jSize;j++) {
            for (int i=0; i<iSize;i++) {
                System.out.print(matrizFinal[j][i]);
            }
            System.out.println();
        }
        */

     }
    public void modificarArreglo(int colActual, int rep) { //intercambia las columnas que pasan como param
        /*for (int i=0; i<matriz.length;i++)
            matrizAuxiliar[i][rep]=matriz[i][colActual];*/
        char[]aux = new char[matriz.length];
        for (int i=0; i<matriz.length;i++){
            aux[i]=matriz[i][rep];
            matriz[i][rep]=matriz[i][colActual];
            matriz[i][colActual]=aux[i];
        }
    }

    public boolean esElMenor(char[] arreglo, char car) {
        boolean menor=true; //asume que es el menor.
        int i =0;
        if (car==' ')
            menor = false;
        else {
            while ((i<arreglo.length)&&(menor)) {
                if ((arreglo[i]!=' ')&&(car!=' ')&&(arreglo[i]<car))
                    menor=!menor;
                else
                    i++;
                }
            }
        return menor;
    }

Al introducir una clave de descifrado falla, la cosa es que la clase de encriptacion no trae un argumento concreto, es decir hay que itnroducir una palabra pero no la clave de cifrado, asi que ya me dirán que hago XDDDD

Saludos

sapito169

por que malogran su codigo poniento el gui de netebeans

Debci

Cita de: sapito169 en 16 Noviembre 2009, 01:52 AM
por que malogran su codigo poniento el gui de netebeans
porque es mucho mas sencillo hacer la gui, sinceramente creo que hacerla por codigo es una perdida de tiempo(yo mismo empezé asi, y acabé artandome)
Alguien sabria ayudarme?

Saludos

Leyer

el error es muy facil la matriz no esta inicializada que quiero decir con esto que si no codificas. la matriz no se inicia. y el decodificador no puede iniciar. ademas tendrias que setear la clave otra cosas estas derrochando memoria creando 2 objetos del encriptor en lis listerner de los button solo usa uno :)

Saludos y suerte.

sapito169

Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en 16 Noviembre 2009, 18:08 PM
Cita de: sapito169 en 16 Noviembre 2009, 01:52 AM
por que malogran su codigo poniento el gui de netebeans
porque es mucho mas sencillo hacer la gui, sinceramente creo que hacerla por codigo es una perdida de tiempo(yo mismo empezé asi, y acabé artandome)
Alguien sabria ayudarme?

Saludos

yo me referia que a nadie con dos dedos defrente le interesa un orrible codigo autogenerado que nisiquiera se puede editar con fasilidad y que no tiene nada que ver con ver en el problema

juancho77

me sumo a sapito, si quieres que alguien realmente lo vea y te ayude al menos sube el archivo del proyecto para que sea mas sencillo mirarlo. Ademas, si no funciona el descifrar no creo que el error este en la interfaz grafica. Seria una sana idea separar la capa de datos del programa de las otras interfaces.