Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia

24/12/09

Encriptación: Metodo Bífido en java

JAN29



El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos, y donde se trabaja con estos símbolos más que con las letras mismas.

El método comienza con la utilización 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 pretendía cifrar.
Para cifrar el texto en claro se escriben los equivalentes numéricos 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 método altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados monoalfabéticos.

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 añade 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
    //añadiendo 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


Ahora para incentivar en la construccion y prueba de este codigo, te presento a Natalia

Si quieres saber mas de ella decifra el siguiente mensaje, encontraras informacion importante, asi como su mail para que chatees con ella.


DZLE OC CDEYTPN, NCEST ACÑNDFTB DO CI TOM, AQBDQOA.
VN UQKIR ST EDCTA, YMDBBN Y DAYZAK, NR LÚEFSX DHSDCMDA
YF KT "WSOT UCCAVL", CWCMTL CAVV QBG DB FQLD: "AAQ 
GXQAPA DOPSQ ACQ KUO TY OGQL HSDLDEGDC AVAO SR IIQT
UBD AZ TMAZOCQHM SAL IYLZA VTMACCTNS, APNQN L LQDNDZACN".
DI GORLKCD QPDSCXA VOD MDBC NI ITSMAA MI HQFH_2590@NTSMDSI.UAP
DWOOQE!!!


SUERTE!!!

10 comentarios:

Unknown dijo...

Solo quiero decir que el codigo se ve muy bien hecho, pero no me funciona en netbeans.

necesito un código para encriptar en V, las filas se le piden al usuario y el numero de columnas depende del texto que el usuario digite, si me pueden ayudar lo necesito de inmediato es para hoy, gracias

Anónimo dijo...

por favor podrías poner el código para descargar, me ayudaría mucho.
GRACIAS.

Anónimo dijo...

que buena descifrado y el algoritmo por igual, si no es mucha molestia podrías poner el código para descargar???

mouse dijo...

vamos que con la clase bifido tienen todo, solo es implementar la interfaz gui. intentenlo que es muy facil

Unknown dijo...

esto me haria ganar un curso... me harias un gran favor de un link de la dscarga del codigo... t lo agradeceria mi mail nielias@hotmail.es

Anónimo dijo...

Amigo que no me reconoce este codigo en el evento del Jbutton
b.Encriptar(t)
b.Desencriptar(t)

no me reconoce b
Ayuda amio

most_09 dijo...

solo tienes que llamar la clase amigo de la siguiente manera no solo es copiar el codigo si no entenderlo te dejo el codigo simple Bifido b= new Bifido();

Anónimo dijo...

puedes subir el proyecto de netbeans completo sete agradece

Unknown dijo...

Que tal socio te reto a hacer un Encriptado y Desencriptado de un Archivo properties .. Donde se encuentran los datos de la conexion a SQL...

Unknown dijo...

Si quieres te enseño ;)

Post recomendado