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:
Al 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
Para desencriptar, solo utilizar el metodo apropiado ( desencriptar() ) y listo
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! :)
Inspeccionando los cientos de marcadores que tenia en mi firefox, me encontre un enlace web con una interesante clase pa...
Continuación del tutorial «Google Circles en java» o.O 🙂 La Interfaz El proyecto consta de una sola interfaz la cual es...
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...
En esta oportunidad, se deja a disposición de la comunidad de programadores de Bolivia y también porque no, del que quie...
Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación» La Interfaz frmSelected.java: Haciendo...
El siguiente código te muestra una lista de los dispositivos de impresión que tenemos instalado en el sistema import jav...
Los comentarios estan cerrados
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...
y en c++ o java
donde descargaste el vb.net o cuando lo pones en c++
en mi tienda pirata más cercana 😉
estare actualizando todos los tutos, estaba ocupado
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…
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 🙂