Este artículo trata sobre la implementación del método de cifrado Gronsfeld del tipo conocido como polialfabéticos, usando el lenguaje de programación C#, esto con fines educativos, teniendo en cuenta que este cifrado data de mediados de XVII (usado mucho en Europa) siendo un método de baja seguridad por el poder de computo que existe actualmente pero podría ser usado en aplicaciones donde se quiera cifrar datos como directorios, nombres, recursos, etc sin recurrir a los métodos convencionales de cifrado dados por el Net Framework .
La parte detallada sobre como funciona el cifrado Gronsfeld la puede encontrar mi artículo:
A modo de repaso, solo mencionare que este método de cifrado se basa en una tabla (pre establecida) y que para encriptar un mensaje hace uso de una clave numérica (dada por el usuario), con un ejemplo se puede entender mejor:
La tabla es la base del cifrado Gronsfeld y para desarrollar el programa hay que verla a detalle:
- Primero los términos que integran la tabla no son al azar sino van rotando (filas) por una serie de progresión de números primos. Este factor lo usaremos para generar todos los valores de la tabla Gronsfeld .
- Segundo cada fila es usada como indice numérico para buscar cada termino.
Inicialmente pensé almacenar todos los valores de la tabla en una matriz vectorial pero al hacerlo, al buscar cada termino en la correspondiente tabla tendría que recorrerla toda (26 x10) 260 elementos cada vez, es decir cada bucle tendría que recorrerla 260 términos por cada termino que se busque su correspondencia, haciendo lento el proceso y gastando recursos de sistema.
Para evitarlo utilice una matriz de dos términos para el almacenamiento de los valores de la tabla :
La importancia de hacerlo de esta manera radica en que el indice < i > (del gráfico) coincide con el indice de la tabla Gronsfeld (filas), es decir que al buscar con la clave (dada por el usuario) un número dado este coincidirá con el termino < i > lo siguiente seria buscar su coincidencia en letras (25 elementos), Es decir por cada termino que busca su correspondencia tendría que recorrer un bucle de 25 elementos
El desarrollo de la aplicación
La aplicación la he desarrollado en c# usare la interface de consola (sin ventanas ni botones) esto para simplificar código, haré uso de una clase eso para que sea escalable, es decir que pueda ser importada a cualquier aplicación
La concepción se puede visualizar en el diagrama de clases:
El código por partes
El método < generar > de la clase < Class__Gronsfeld >:
El método < Encriptado > de la clase < Class__Gronsfeld >:
El método < Des_encriptado> de la clase < Class__Gronsfeld > :
el <main > de la interface de consola :
Imagen del visor de depurador:
RESULTADO AL COMPILAR LA APLICACIÓN
Mejoras
- Esta aplicación tiene la limitación de cifrar palabra por palabra y para cifrar frases completas seria necesario que capture los espacios en blanco y darles un símbolo al cifrar tal como @@.
- Se puede mejorar con un control de la clave y si es menor que la frase/palabra repetirla cuantos caracteres tenga la frase/palabra.
- Cambios menores como controlar mayúsculas/minúsculas y numéricos ingresados por teclado.
OTROS ARTÍCULOS
-
-
-
-
-
La parte detallada sobre como funciona el cifrado Gronsfeld la puede encontrar mi artículo:
A modo de repaso, solo mencionare que este método de cifrado se basa en una tabla (pre establecida) y que para encriptar un mensaje hace uso de una clave numérica (dada por el usuario), con un ejemplo se puede entender mejor:
La tabla es la base del cifrado Gronsfeld y para desarrollar el programa hay que verla a detalle:
- Primero los términos que integran la tabla no son al azar sino van rotando (filas) por una serie de progresión de números primos. Este factor lo usaremos para generar todos los valores de la tabla Gronsfeld .
- Segundo cada fila es usada como indice numérico para buscar cada termino.
Inicialmente pensé almacenar todos los valores de la tabla en una matriz vectorial pero al hacerlo, al buscar cada termino en la correspondiente tabla tendría que recorrerla toda (26 x10) 260 elementos cada vez, es decir cada bucle tendría que recorrerla 260 términos por cada termino que se busque su correspondencia, haciendo lento el proceso y gastando recursos de sistema.
Para evitarlo utilice una matriz de dos términos para el almacenamiento de los valores de la tabla :
La importancia de hacerlo de esta manera radica en que el indice < i > (del gráfico) coincide con el indice de la tabla Gronsfeld (filas), es decir que al buscar con la clave (dada por el usuario) un número dado este coincidirá con el termino < i > lo siguiente seria buscar su coincidencia en letras (25 elementos), Es decir por cada termino que busca su correspondencia tendría que recorrer un bucle de 25 elementos
El desarrollo de la aplicación
La aplicación la he desarrollado en c# usare la interface de consola (sin ventanas ni botones) esto para simplificar código, haré uso de una clase eso para que sea escalable, es decir que pueda ser importada a cualquier aplicación
La concepción se puede visualizar en el diagrama de clases:
El código por partes
El método < generar > de la clase < Class__Gronsfeld >:
El método < Encriptado > de la clase < Class__Gronsfeld >:
El método < Des_encriptado> de la clase < Class__Gronsfeld > :
el <main > de la interface de consola :
Imagen del visor de depurador:
RESULTADO AL COMPILAR LA APLICACIÓN
Mejoras
- Esta aplicación tiene la limitación de cifrar palabra por palabra y para cifrar frases completas seria necesario que capture los espacios en blanco y darles un símbolo al cifrar tal como @@.
- Se puede mejorar con un control de la clave y si es menor que la frase/palabra repetirla cuantos caracteres tenga la frase/palabra.
- Cambios menores como controlar mayúsculas/minúsculas y numéricos ingresados por teclado.
OTROS ARTÍCULOS
-
-
-
-
-