Vous êtes sur la page 1sur 5

Encriptacin: Metodo Bfido en java

El mtodo Bfido es un cifrado fraccionario. Es decir que cada letra viene representada por una o ms letras o smbolos, y donde se trabaja con estos smbolos ms que con las letras mismas. El mtodo comienza con la utilizacin de un alfabeto ordenado o desordenado (depende del grado de dificulad que se le pretenda dar en su descifrado) en una matriz 5x5. En este ejemplo utilizaremos la siguiente matriz:

Al ser una matriz de 5x5 nos vemos obligados a cifrar de la misma forma la I y la J. El contexto nos permitir distinguir cual de las dos letras se pretenda cifrar. Para cifrar el texto en claro se escriben los equivalentes numricos de cada letra, utilizando sus "coordenadas". Por ejemplo: HOLA MUNDO, genera las siguientes coordenadas (f,c) 233431113245331434, y para proceder con la encriptacion la cadena de coordenadas resultantes es dividida en dos: 233431113 245331434 y se forma una nueva cadena de coordenadas 22 34 35 43 33 11 14 13 34 las cuales formaran el nuevo mensaje encriptado GOPS NADCO. Este mtodo altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados monoalfabticos. La interfaz

Creamos una clase llamada bifido.java, en esta clase colocamos el codigo respectivo para realizar la encriptacion como la desencriptacion, el codigo se encuentra comentado.
/** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class Bifido { char[][] matriz = new char[6][6]; char[] mensaje; private String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public Bifido(){ //la tabla esta formada por 25 letras, donde I=J matriz[1][1]='A'; matriz[1][2]='B';matriz[1][3]='C';matriz[1][4]='D';matriz[1][5]='E'; matriz[2][1]='F'; matriz[2][2]='G';matriz[2][3]='H';matriz[2][4]='I';matriz[2][5]='K'; matriz[3][1]='L'; matriz[3][2]='M';matriz[3][3]='N';matriz[3][4]='O';matriz[3][5]='P'; matriz[4][1]='Q'; matriz[4][2]='R';matriz[4][3]='S';matriz[4][4]='T';matriz[4][5]='U'; matriz[5][1]='V'; matriz[5][2]='W';matriz[5][3]='X';matriz[5][4]='Y';matriz[5][5]='Z'; } public String Encriptar(String t){ t = clean(t); String nt=""; String enc=""; int fila ; int col;

//para cada caracter se extrae el par de numeros correspondientes en la matriz for(int i=0; i<t.length();i++){ nt = nt + getposicion(t.charAt(i)); } //Ahora se realiza el proceso de encriptacion for(int i=0;i<nt.length()/2;i++){ fila = Integer.parseInt(String.valueOf(nt.charAt(i))); col = Integer.parseInt(String.valueOf(nt.charAt(i + nt.length()/2))); enc = enc + String.valueOf(matriz[fila][col]); } enc=build(enc); return enc; } public String Desencriptar(String t){ t=clean(t); String nt=""; String tmp1=""; String tmp2=""; boolean b=true; //para cada caracter se extrae el par de numeros correspondientes en la matriz for(int i=0; i<t.length();i++){ nt = nt + getposicion(t.charAt(i)); } //como la cadena de numeros se encuentra encriptada, se procede //a su nuevo ordenamiento for(int i=0;i<nt.length();i++){ if(b){ tmp1= tmp1 + nt.charAt(i); b=false; } else { tmp2= tmp2 + nt.charAt(i); b=true; } } nt= tmp1+tmp2; tmp1=""; int fila; int col; //ahora que ya se tiene a la cadena de numeros con el orden original //se procede a reconstruir el mensaje for(int i=0; i<nt.length();i+=2){ fila = Integer.parseInt(String.valueOf(nt.charAt(i))); col = Integer.parseInt(String.valueOf(nt.charAt(i+1))); tmp1 = tmp1 + String.valueOf(matriz[fila][col]); } tmp1=build(tmp1); return tmp1; }

//obtiene la posicion de filas y columnas correspondientes al caracter //pasado como parametro en la matriz private String getposicion(char c){ String p = null; if(c=='J'){//como el caracter J no se encuentra en la tabla //se aade automaticamente con la posicion de I p="24"; } else{ for(int i=0;i<6;i++){ for(int j=0;j<6;j++){ if(c==matriz[i][j]){ p = Integer.toString(i)+Integer.toString(j); break; } } } } return p; } //encargado de limpiar el mensaje extrayendo solo las letras y //guardando los caracteres especiales para rearmar el mensaje despues private String clean(String t){ t = t.toUpperCase(); mensaje = t.toCharArray(); String tmp1=""; for(int i=0;i<mensaje.length;i++){ int x = abc.indexOf(mensaje[i]); if(x!=-1){//es una letra valida tmp1=tmp1+mensaje[i]; } } return tmp1; } //reconstruye el mensaje con las palabras encriptadas/desencriptadas //aadiendo los caracteres especiales private String build(String t){ String tt=""; int count=0; for(int i=0;i<mensaje.length;i++){ int x = abc.indexOf(mensaje[i]); if(x!=-1){ tt= tt + t.charAt(count); count++; } else { tt=tt + mensaje[i]; } } return tt; } }

Para implementar este clase en nuestra interfaz, hacemos las llamadas correspondientes a los objetos jButton
private void cmdEncriptarActionPerformed(java.awt.event.ActionEvent evt) { String t = texto1.getText(); texto2.setText(b.Encriptar(t)); } private void cmdDesencriptarActionPerformed(java.awt.event.ActionEvent evt) { String t = texto1.getText(); texto2.setText(b.Desencriptar(t)); }

El resultado

Vous aimerez peut-être aussi