Ir al contenido principal

2# Criptografía - Polybios


__ Indice __


¿Qué es Polybios?

Proceso de cifrado

Proceso de descifrar

Código

Github


__ ¿Qué es Polybios? __

Es un sistema de cifrado en el que se coloca todo el alfabeto en una matriz, y cada letra tiene una posición en la que será convertida. 

Es considerado el algoritmo de cifrado más antiguo que se tiene registro
•Su nombre se le da por el Historiador griego Polybios
• Alrededor del año 150 a. C.
Resultado de imagen para Polybios

__ Proceso de cifrado __


Bien, el proceso de cifrado es bastante fácil, tenemos nuestra matriz bidimensional , si queremos traducir el carácter - ? - nos da como resultado [ 0, 0 ]

Y pues, eso es todo...

Vayamos a cifrar la palabra Hola

H = [4, 9]    o = [1 , 9]    l  = [1, 5]     a = [0, 4] 

Resultado: 49191504

__ Proceso de descifrar __


 Ahora si queremos el proceso inverso, solamente tenemos, tenemos que mandarle las posiciones y este nos devolverá el carácter

[4, 9] = H     [1 , 9] = o    [1, 5] = l    [0, 4]  = a

Resultado: Hola

__ Código __

Esta vez lo haremos en el lenguaje de programación Go

  Lo primero que podemos ver, son todas las librerías que hemos importado para este proyecto.

fmt: La librería de formato principal en Go, nos permite imprimir en pantalla, operaciones aritméticas, todo lo básico que podemos hacen en un lenguaje.

strings: Para el manejo de un texto, ya sea seprandolo o eliminando una sección del string

strconv:  Para convertir un dato de tipo string a cualquier tipo primitivo y viceversa.

bufio: Para poder leer o escribir datos sobre la consoal

os: Crear una interfaz que interactué directamente con el sistema operativo, en este caso, interactuar con CMD

os/exec: ejecuta comandos externos al lenguaje Go, ya sea de la línea de comandos, CMD, etc etc

github.com/fatih/color: Para darle color a la salida de texto 

Ahora vamos con nuestras variables globales.

X - Y: Definirán el tamaño de nuestro arrego bidimensional, si se quiere agregar más caracteres, se tiene que modificar el tamaño desde aquí y el código seguirá funcionando

option: Será la opción que nos de el usuario de si quiere cifrar, descifrar o salir

text: El texto que se ingresará por el teclado

code: El texto ya cifrado 

POLYBIOS: Nuestra matriz de caracteres


La función menu nos creará un banner con el fin de darle estética al proyecto.


Con la librería os y os/exec ordenamos a la consola de comandos, que nos limpie la pantalla de la consola. con el método Run() ejecutamos dicha orden.

La condición: if code != "" evaluaremos si nuestra variable global que guarda el texto cifrado, esta vacía o no. Si ya tiene texto, lo mostraremos , esto para evitar que se pierda el texto al limpiar la consola con cmd.Run()

color.Cyan(banner): Imprimimos nuestro banner con la librería github.com/fatih/color para darle un color

Guardamos tanto la opción que ha solicitado el usuario y también guardamos su palabra ingresada.

La última parte donde utilizamos bufio.NewReader(os.Stdin) es para leer un dato de la consola, indicamos que vamos a leer un string ( r.readString ), y eliminamos los posibles saltos de linea ( r.TrimRight ). Al final lo guardamos en nuestra varible global text

Bien, ahora vamos con el cifrado . Separamos nuestro texto, haciendo que nos quede un "arreglo" de todos los caracteres que contiene.

El primer ciclo va a recorrer cada indice de nuestro arreglo.

El segundo y tercer ciclo están hecho para recorrer cada indice de nuestro arreglo bidimensional POLYBIOS.

La condición 

if (t[i] == POLYBIOS[x][y]) {
                                           code += (strconv.Itoa(x) + strconv.Itoa(y)
}                                               

      Va a comprobar si el carácter que le mandamos es igual a uno que este dentro de nuestra matriz POLYBIOS, si es así, esa posición concatenar la a nuestra variable global code.

Ejemplo, supongamos que Mandamos el texto hola. eso quiere decir que t[0] = 'h'  ¿no?
Si recorremos toda nuestra matriz hasta llegar a la posición de la h sería POLYBIOS[1][1].

Entonces al valor que ya tiene la variable global code, le agregamos 1 1, que es la posición de dicho carácter.

strconv.Itoa() Es para convertir una variable de tipo entero, a uno string 


La última función que debemos de crear (Sin contar main), es para descifrar. El procedimiento es el mismo, separamos nuestro texto del usurio en una cadena.

Con un ciclo vamos recorriendo todo el arreglo, ya que la Matriz POLYBIOS pide dos datos para sacar una posición, tenemos que tener dos variables, una que guarde el primer carácter y la otra que guarde el que le sigue.

Al final, solamente metemos esa posición en la matriz, y nos devolverá el carácter correspondiente, eso lo guardamos en nuestra variable global code y listo !!

Ya para terminar, nuestra función main, dentro de un ciclo infinito llamará a la función menu, para mostrar el banner y las opciones.
Ya solamente con una condición evaluamos si quiere cifrar, descifrar o salir. Dependiendo del valor de la opción, llamaremos a una función o simplemente, cancelamos el proceso. 


Y listo !!! hemos terminado el cifrado Polybios. Nos vemos en el siguiente blog



__ Github __

 https://github.com/NeoTRAN001/Crypto/blob/master/polybios.go


Comentarios

Entradas más populares de este blog

3# Criptografía - Cifrado por sustitución Atbash

__ Indice __ ¿Qué es Atbash? Proceso de cifrado Proceso de descifrar  Código Github ¿Qué es Atbash? Atbash es un método de cifrado para el alfabeto hebreo, por lo tanto entra en la clasificación de           - Cifrado Clásico - se le conoce también como el método espejo, pues consiste en sustituir en la que la primera letra (A) será sustituida por la última (Z), la segunda por la penúltima (B - Y) y así sucesivamente. Proceso de cifrado Vayamos a probarlo, vamos a cifrar nuestra palabra de costumbre RegularWeb: R  =   I E  =  V G  =  T U  =  F L  =  O                  Resultado : IVTFOZIDVY A  =  Z R  =  I W =  D E  =  V B  =  Y Proceso de descifrar  Para descifrar es el mismo procedimiento. R  =   I E  =  V G  =  T U  =  F L  =  O                  Resultado : REGULARWEB A  =  Z R  =  I W =  D E  =  V B  =  Y Código Github   https://github.com/NeoTRAN001/Crypt

Sockets en C#

__ Índice __ ¿Qué son los sockets en programación? Ejemplo en C# Github __ ¿Qué son los socket en programación? __ Un socket es un método de comunicación entre un programa cliente y un servidor. Entonces podemos decir que los sockets, son el "tunel" de comunicación entre dos aplicaciones. __ Ejemplo en C# __ Servidor  Creamos un nuevo proyecto en consola que será el código del servidor Importamos las librerías necesarias para los sockets Declaramos dos variables, una será la dirección del Server , ya que estamos haciendo todo en nuestra pc la dirección debe de ser la local, localhost o 127.0.0.1 La otra variable será el puerto de conexión, es recomendable seleccionar un puerto alto. Es por eso que las aplicaciones utilizan 8080 . Ahora tenemos que crear un objeto de tipo Socket, que nos pide tres parámetro: 1- Esquema del tipo de diccionario: AddressFamily.InterNetwork dice que utilizará una dirección IP