Codigo de la gui:
Código
package main; /** * * @author debci */ import encriptador.*; /** 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() { setTitle("Encriptador Basico"); jLabel1.setText("Introduzca el texto que desea cifrar:"); jLabel2.setText("Introduzca la clave de cifrado:"); btnEncriptar.setText("cifrar"); 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) .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"); 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) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(87, 87, 87)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel5) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(87, 87, 87)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addComponent(clavedesencriptada) .addComponent(btnDesencriptar)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel6) ); 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..."); jMenu2ActionPerformed(evt); } }); jMenuItem1.setText("Ver creditos del programa"); 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) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING) ); pack(); }// </editor-fold> } Acerca acerca = new Acerca(); acerca.setVisible(true); } encriptador encriptador = new encriptador(); contraseñaEncriptada = encriptador.codificar(palabraNormal, ClaveIntroducida).trim(); contraseEncr.setText(contraseñaEncriptada); contraseEncr.setVisible(true); } entradaHash.setText(contraseñaEncriptada); encriptador encriptador = new encriptador(); clavedesencriptada.setText(claveDesencriptadaLimpia); } /** * @param args the command line arguments */ public void run() { new Main().setVisible(true); contraseEncr.setVisible(false); clavedesencriptada.setVisible(false); } }); } // Variables declaration - do not modify // End of variables declaration }
Codigo de la clase encriptadora:
Código
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
import java.io.BufferedReader; import java.io.InputStreamReader; /** * * @author debci */ public class encriptador { //instance private char[][] matriz; //reader //methods 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++; } for (int i=1; i<matriz.length;i++) for (int j=0; j<matriz[0].length;j++) output=output + matriz[i][j]; return output; } claveOriginal=clave; textoOriginal=texto; int jSize= claveOriginal.length(); int iSize= (textoOriginal.length()/jSize)+1; if ((textoOriginal.length()%jSize)!=0) iSize++; 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++; } } } /*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]); } } */ 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; }
Saludos