jueves, 18 de abril de 2013

Cifrado CESAR en C/C++

Les presento el código del encriptador CESAR. Introducido un fichero de texto, genera un fichero con el mismo contenido, pero cifrado mediante este método. La información a cerca del cifrado se presenta en el encabezado del programa.
Quiero recordar que en el blog hay disponible un tema sobre el mismo tipo de cifrado, pero en Pascal, en vez de en C. Además también hay otro tipo de codificación y decodificación que usa un método algo más complejo.
Debido a la simplicidad de este método, el cifrado CESAR está actualmente en casi total desuso.

Un poco de historia: El nombre de CESAR proviene de que según la historia, el primer personaje en usarlo fue Julio Cesar, con un desplazamiento de 3 letras, para comunicarse con los mandos del ejercito romano y no ser descubierto por personas ajenas a él.

CÓDIGO:




/*CIFRADO CESAR EN C/C++*/

/*Este programa se va a usar para llevar a cabo una codificación de un fichero
de texto, mediante el codificado CESAR, que es uno de los métodos más simples
de encriptar.
La variable trans==translación de encriptación, es la que indica cuantas letras
se va a correr el abecedario hacia la derecha. Ejemplo: 
      trans=3 
      c1=Caracter decodificado
      c2=Caracter codificado
      c2=c1+trans
      Entonces en nuestro caso si c1='A'
      c2='A'+3='D'

El programa solo codifica letras, tanto mayúsculas como minúsculas:
del ASCII 65 ('A') al 90 ('Z') y del 97 ('a') al 122 ('z').
*/

#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *dat1,*dat2;
char nombre1[50],nombre2[50],c;
int trans;

printf("Seleccione translacion de encriptacion: "); scanf("%d", &trans);
printf("Nombre del fichero a codificar: "); scanf("%s", &nombre1);
printf("Nombre del fichero donde guardar codificado: "); scanf("%s", &nombre2);


if (fopen(nombre1,"r")==NULL) 
printf("\nEl fichero no existe.\n\n");
else
    {
dat1=fopen(nombre1,"r");/*Se abre en modo lectura*/
dat2=fopen(nombre2,"w");/*Se abre en modo escritura*/
fscanf(dat1,"%c",&c);
while (!feof(dat1))
{
/*Se codifica el caracter*/
if ((c>='A')&&(c<='Z'))
{
                c=((c+trans-'A')%('Z'-'A'+1))+'A';            
            }
            else if ((c>='a')&&(c<='z'))
            {
                c=(c+trans-'a')%('z'-'a'+1)+'a';
            }
            
/*Se escribe el caracter en el codificado*/
fprintf(dat2,"%c",c);

/*Se lee un nuevo caracter*/
fscanf(dat1,"%c",&c);
}
fclose(dat1);
fclose(dat2);/*Se cierran ambos ficheros*/
}
}




Y aquí un ejemplo de ejecución:





Un saludo.

1 comentario:

  1. hola tengo entendido que para el decodificado debe ser algo mas o menos igual, muy buen aporte

    ResponderEliminar