Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / .Net / Ingenieria de Sistemas / Seguridad / Visual Basic / Encriptación por el método bífido

Encriptación por el método bífido

Autor jc mouse domingo, junio 26, 2011

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 5×5.

En este ejemplo utilizaremos la siguiente matriz:

EncriptacionAl ser una matriz de 5×5 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 siguiente clase, hecha en vb.net realiza los pasos anteriormente descritos, esta comentada y creo que facilmente entendible

Public Class Bifido

    ' @web https://www.jc-mouse.net
    ' @author Mouse

    Dim matriz(5, 5) As Char
    Dim mensaje() As Char ' se guarda todo el mensaje
    Dim abc As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    Public Sub New()
        'la matriz esta formada por 25 letras, donde el caracter 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"
    End Sub

    Public Function Encriptar(ByVal texto As String) As String
        texto = Limpiar_Texto(texto)
        Dim pos_matriz As String = ""
        Dim encriptado As String = ""
        Dim fila As Integer
        Dim col As Integer
        'para cada caracter se extrae el par de numeros correspondientes de la matriz
        Dim c() As Char = texto.ToCharArray()
        For i = 0 To c.Length - 1
            pos_matriz = pos_matriz + getposicion(c(i))
        Next
        'Ahora se realiza el proceso de encriptacion        
        Dim x() As Char = pos_matriz.ToCharArray
        For i = 0 To x.Length / 2 - 1
            fila = Integer.Parse(x(i))
            col = Integer.Parse(x(i + x.Length / 2))
            encriptado = encriptado & matriz(fila, col)
        Next
        encriptado = Reconstruir_Mensaje(encriptado)
        Return encriptado
    End Function

    Public Function Desencriptar(ByVal t As String) As String
        t = Limpiar_Texto(t)
        Dim pos_matriz As String = ""
        Dim tmp1 As String = ""
        Dim tmp2 As String = ""
        Dim band As Boolean = True
        'para cada caracter se extrae el par de numeros correspondientes en la matriz
        For i = 0 To t.Length - 1
            pos_matriz = pos_matriz + getposicion(t.Substring(i, 1))
        Next
        'como la cadena de numeros se encuentra encriptada, se procede
        'a su nuevo ordenamiento
        For i = 0 To pos_matriz.Length - 1
            If band Then
                tmp1 = tmp1 & pos_matriz.Substring(i, 1)
                band = False
            Else
                tmp2 = tmp2 & pos_matriz.Substring(i, 1)
                band = True
            End If
        Next
        pos_matriz = tmp1 + tmp2
        tmp1 = ""
        Dim fila As Integer
        Dim col As Integer
        'ahora que ya se tiene a la cadena de numeros con el orden original
        'se procede a reconstruir el mensaje
        Dim x() As Char = pos_matriz.ToCharArray
        For i = 0 To x.Length - 1 Step 2
            fila = Integer.Parse(x(i))
            col = Integer.Parse(x(i + 1))
            tmp1 = tmp1 + matriz(fila, col).ToString
        Next
        tmp1 = Reconstruir_Mensaje(tmp1)
        Return tmp1
    End Function

    'obtiene la posicion de filas y columnas correspondientes al caracter 
    'pasado como parametro en la matriz
    Private Function getposicion(ByVal c As Char) As String
        Dim posicion As String = ""
        Dim band As Boolean = False
        If c = "J" Then ' Caso especial
            'se añade automaticamente con la posicion del caracter I
            posicion = "24"
        Else
            For i = 1 To 5
                For j = 1 To 5
                    If (c = matriz(i, j)) Then
                        posicion = i & j
                        band = True
                        If band Then Exit For
                    End If
                Next
                If band Then Exit For
            Next
        End If
        Return posicion
    End Function

    'encargado de limpiar el mensaje extrayendo solo las letras y
    'guardando los caracteres especiales para rearmar el mensaje despues
    Private Function Limpiar_Texto(ByVal t As String) As String
        t = t.ToUpper
        'descompone el mensaje en un array de caracteres
        mensaje = t.ToCharArray
        Dim tmp1 As String = ""
        'extrae solo las letras validas
        For i = 0 To mensaje.Length - 1
            Dim x As Integer = abc.IndexOf(mensaje(i))
            If x <> -1 Then 'es una letra valida
                tmp1 = tmp1 + mensaje(i)
            End If
        Next
        Return tmp1
    End Function

    'reconstruye el mensaje con las palabras encriptadas/desencriptadas
    'añadiendo los caracteres especiales que no son alterados
    Private Function Reconstruir_Mensaje(ByVal texto As String) As String
        Dim r_mensaje As String = ""
        Dim count As Integer = 0
        Dim k As Integer = mensaje.Length - 1
        Dim t() As Char = texto.ToCharArray
        For i = 0 To k
            Dim x As Integer = abc.IndexOf(mensaje(i))
            If x <> -1 Then
                r_mensaje = r_mensaje & t(count)
                count = count + 1
            Else
                r_mensaje = r_mensaje & mensaje(i)
            End If
        Next
        Return r_mensaje
    End Function

End Class

Su implementacion desde consola para la encriptacion tenemos:

Sub Main()
        Dim bifido As Bifido = New Bifido
        Dim s As String = bifido.Encriptar("Copyright 2011 - jc Mouse Bolivia " & vbCrLf & _
                        "Algoritmo de Encriptación Método Bífido" & vbCrLf & "All rights reserved")
        Console.WriteLine(s)
        Console.ReadKey()

y la salida en pantalla

Encriptacion bifidaPara desencriptar, solo utilizar el metodo apropiado ( desencriptar() ) y listo

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Personalizar JTable: Problema resuelto

Personalizar JTable: Problema resuelto

En este post se da respuesta a una pregunta realizada por facebook. El problema dice así: Se quiere personalizar un JTab...

Listar dispositivos de impresión

Listar dispositivos de impresión

El siguiente código te muestra una lista de los dispositivos de impresión que tenemos instalado en el sistema import jav...

SQLite: Encriptación de datos

SQLite: Encriptación de datos

SQLite es un sistema de gestión de bases de datos relacional,  escrita en C, si se desea hacer uso de encriptación con S...

JToggleButton y base de datos

JToggleButton y base de datos

En este tutorial veremos una forma de trabajar con el swing  JToggleButton y una base de datos para dar respuesta a una...

Ecuación de segundo grado

Ecuación de segundo grado

Problema: Implemente el código necesario en Kotlin para resolver una ecuación de segundo grado de números reales: Soluci...

Crea tu JLabel con hipervinculo

Crea tu JLabel con hipervinculo

Si queremos añadir un enlace web a una aplicación en java, podemos hacer uso de botones o etiquetas, incluso se puede añ...

5 comentarios en “Encriptación por el método bífido”

  1. horus dice:

    y en c++ o java

  2. rmb dice:

    donde descargaste el vb.net o cuando lo pones en c++

    1. Mouse dice:

      en mi tienda pirata más cercana 😉
      estare actualizando todos los tutos, estaba ocupado

  3. Giovanny Caldera dice:

    Hola como esta Mouse.. muy interesante el aporte de encriptacion.. pues me gustaria dar mi grano de ayuda y aporte.. yo cree una clase de encriptacion no parecida en visual fox pro hace ya años atras y hasta hace poco la actualize a vb.net y la quiero transferir a Java ahora.. pero me gustaria doñarla a la comunidad
    explico la clase..
    la clase genera 2 tipos de resultados.. uno en Hexadecimal y otro con caracteres fuera del alfabeto que usamos.. pero lo que hace esta clase especial y diferente es que genera resultados diferentes siempre partiendo de la misma cadena orignal ejemplo real a hexadecimal
    texto:
    Hola mundo

    resultado 1ra ves:
    AAE0F0C3BEEDF8E09EF7EEEFF2ED
    resultado 2da ves:
    AAEDEFA3CBECD8ED9DD7FBEED2FA
    resultado 3ra ves:
    ABCEFAC4E0ACF7F9DE85F602E6CEFE

    estos 3 resultados significan lo mismo.. si desencripto cualquiera de las 3 cademas resultantes sera = Hola mundo

    real a caracteres raros:

    texto:
    Hola mundo

    resultado 1ra ves:
    «æóœÔÄðÑҝïÙÚæ÷
    resultado 2da ves:
    «áÙÁé¿Ööç˜ÕþïáÝ
    resultado 3ra ves:
    ªÌõ¶ªòëÌ£êÚôåÙ

    estos 3 resultados significan lo mismo.. si desencripto cualquiera de las 3 cademas resultantes sera = Hola mundo

    mi correo es :
    giocaldera@hotmail.es
    y me pueden buscar en facebook con ese mismo correo… si tienen interes puedo donar el proyecto completo en visual basic .net
    espero…

    1. Mouse dice:

      buen aporte amigo pero porque mejor no me envias tu codigo con ejemplos y con una breve explicación asi te lo publicamos en esta misma web 🙂

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

“MyBatis es una herramienta de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacena...

MyBatis es un framework de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados a part...

Webcam Capture es un API  que permite usar una cámara web incorporada o externa directamente desde código Java utilizand...

im4java es una interfaz pura de Java para la línea de comandos de ImageMagick. La interfaz de la línea de comandos de IM...

Herramientas

Generador de Enlaces a Whatsapp