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 http://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

Cifrado por desplazamiento o código de César

Cifrado por desplazamiento o código de César

El cifrado César, también conocido como cifrado por desplazamiento o código de César, es una de las técnicas de cifrado...

MVC: Modelo, Vista y Controlador en PHP

MVC: Modelo, Vista y Controlador en PHP

EL patrón MVC (Model, View, Controller) o Modelo, Vista Controlador, es un tipo de diseño que separa en capas bien defin...

Blog MVC – El theme y primer controlador [p3]

Blog MVC – El theme y primer controlador [p3]

Tercera parte del tutorial [Crea tu blog con el patrón MVC y php] En este post trabajaremos en el Theme del blog, agrega...

Google+ se cierra ¿Que no habían cerrado ya ese antro?

Google+ se cierra ¿Que no habían cerrado ya ese antro?

Google+ o Google plus como también se le conoce a la red social del gigante de la informática Google cerrará para siempr...

Contar segundos (Problema Resuelto)

Contar segundos (Problema Resuelto)

El problema dice asi: Se desea contar los segundos que se presiona un JButton en un formulario. Solución: Para resolver...

JSpinner: Cambiar color de fondo y fuente

JSpinner: Cambiar color de fondo y fuente

Un JSpinner es un componente swing de java con una caja de texto y un par de botones que nos permiten incrementar  y dec...

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

En este post conoceremos algunos de los operadores de comparación que existen en Linux y realizaremos unos ejercicios pa...

En este post conocernos lo que son las Estructuras de Control IF en los script de Bash. Estas estructuras nos ayudan a c...

Todo producto tecnológico tiene un ciclo de vida, algunos bastante corto otros muy largo, podemos mencionar el software...

Cada versión de Linux viene con su propia terminal predeterminada para interactuar con el Sistema Operativo a través de...

Android Bolivia

MAUS