Estadisticas

4/05/2013

Cifrado César Con C# En Visual Studio

Una nueva oportunidad de aportar, la he encontrado en un tema que para algunos puede ser demasiado fácil, y para otros lo suficientemente complicado como para sufrir fuertes dolores de cabeza.
 
Primero vamos hablar brevemente del cifrado César, solo para aclarar algunos conceptos.
 
El cifrado César es una de las técnicas de codificación más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto.

Este cifrado recibe su honor gracias a Julio César, un gran emperador romano, que lo usó originalmente con un desplazamiento de tres espacios hacia la derecha para proteger sus mensajes importantes de contenido militar.

 
La cantidad de espacios y la dirección del desplazamiento puede variar de acuerdo a la aplicación y la persona que lo aplica. Puedes visitar enlaces como el de Wikipedia para más información.
 
El cifrado César en programación lo podemos aplicar para poder cifrar ciertos datos que consideramos como importantes, tales como la contraseña de un usuario, el número de identificación, números de cuenta, etc.
La lógica a trabajar para este ejercicio será más o menos así:
  • Como todos sabemos, cada letra, número o símbolo del idioma español posee una representación numérica, llamada código ASCII. Por lo que debemos de obtener ese código de cada una de las letras que deseemos cifrar.
  • Después de obtener ese número, le aplicamos el desplazamiento de 3 espacios (es decir le sumamos 3 a ese número).
  • Luego, después de aplicada la suma, buscamos el equivalente al caracter de ese número (o código ASCII).
Veamos un sencillo ejemplo:
 
Supongamos que deseamos cifrar la palabra “INTEL”.
 
Primero debemos de obtener el código ASCII de cada una de las letras involucradas en la palabra que deseamos cifrar, obteniendo como resultado:
 

LETRA

CODIGO ASCII

DESPLAZA-MIENTO

RESULTADO ASCII

LETRA EQUIVALENTE

I
73

+3

76

L

N

78

+3

81

Q

T

84

+3

87

W

E

69

+3

72

H

L

76

+3

79

O

 
Si observamos con atención a la tabla anterior nos daremos cuenta que el resultado de utilizar el cifrado César para la palabra “INTEL” será: LQWHO.
 
Sin más cosas que aclarar vamos a la práctica.
 
¡Manos a la obra! Para este ejemplo vamos a utilizar una pequeña aplicación de consola.
 
Como primer paso entonces crearemos la aplicación:
 
image
 
Como siguiente paso, agregaremos una clase en donde guardaremos el método a utilizar para el cifrado. La clase llevará por nombre Cifrado.
 
image
 
Lo primero a realizar dentro de la clase es cambiar el modo de acceso de esta, le pondremos “public” para poder acceder a ella desde cualquier parte de la solución de nuestro proyecto.
 
Como acto seguido, vamos a declarar el método estático que me permitirá utilizar el cifrado César, este método aceptará un parámetro de tipo string, llamado “pPalabra”. Quedando la clase de esta forma:
 
image
Si prestamos atención el método nos indica por medio de la línea roja que subraya el nombre del método, que tenemos un error. Ese error se da porque el método devolverá un resultado de tipo string, que hasta el momento no se ha especificado.
 
Crearemos una variable, la cual nos servirá para guardar la palabra ya cifrada. Será de tipo string y el nombre será _caracteres. Le asignamos como valor inicial un string vacío.
 
Luego vamos a crear un ciclo, el cual nos servirá para poder recorrer toda el string que recibimos por medio del parámetro pPalabra. El ciclo inicializará en 0, y llegará hasta la longitud del parámetro recibido.
 
Al llevar a cabo estas dos acciones el código quedaría de esta forma:
 
image
 
El siguiente paso será el obtener el código ACII de cada una de las letras del parámetro capturado, para eso necesitamos realizar dos operaciones necesarias. La primera será sustraer una letra y almacenarla en una variable de tipo string, gracias al método Substring(). Después de eso obtenemos el código ASCII de la letra, que estará almacenada en la variable. Esto lo lograremos creando una variable de tipo int para almacenar el código resultante luego de realizar la conversión al tipo de datos Char. El código ahora lucirá mas o menos así:
 
image
 
Al obtener el número ASCII, procedemos a desplazar las 3 posiciones a la derecha, tal y como se habla en la idea original del cifrado César. Eso lo logramos sumando 3 al código de la letra a operar. Luego lo que hará falta el convertir ese código resultante de la operación, en el caracter equivalente. Y como último paso para terminar el método, solo tenemos que ir acumulando las letras resultantes en la variable que creamos al inicio del ejercicio, para poder retornar la palabra completa, pero ya cifrada.
 
Al terminar estas operaciones el método quedará de la siguiente forma:
 
image
 
Para poder probar el método, necesitaremos de un par de líneas de código en la clase Program.

Crearemos 2 variables de tipo string, una para almacenar la palabra que el usuario desea cifrar, y la segunda para almacenar el resultado de la ejecución del método, es decir almacenar la palabra ya cifrada.

Luego mandamos a llamar al método Cifrar que está dentro de la clase Cifrado, nótese que como es un método estático, no se necesita crear una instancia de la clase Cifrado.

Finalmente mandamos a imprimir en la consola el resultado de la ejecución del programa quedando las líneas de código algo así:

image
Si todo está perfecto, entonces obtendremos un resultado en la consola como éste:

image

1 comentario :

  1. Muy bueno, ciertamente podrían implementarse cosas mas complicadas en el código
    pero tampoco como para llegar al nivel de un AES o RSA;


    ResponderEliminar