__ 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.
__ 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
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
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()
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
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.
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.
Comentarios
Publicar un comentario