Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / .Net / Ingenieria de Sistemas / Seguridad / Visual Basic / Encriptación por el método bífido

Encriptación por el método bífido

Por 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

Artículos similares

Crear Miniaturas Thumbnails de Videos (Código Fuente)

VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ [...]

Rompecabezas [Código Fuente]

Hace tiempo me pidieron el código fuente de un juego de Puzzle de Neon Genesis Evangelión, este juego es completo, tiene[...]

Sub Tablas: Agregar tablas dentro de otras tablas en Java

El JTable de Java es un gran componente para mostrar datos en una tabla de una forma rápida y sencilla, sin embargo en v[...]

Pruebas instrumentadas con Espresso

Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au[...]

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ñ[...]

TextView Autocompletado

Un TextView autocompletado nos facilita el ingreso de información en aplicaciones móviles ya que te muestra posibles opc[...]