Underc0de

Programación General => C / C++ => Códigos Fuentes => Mensaje iniciado por: S[e]C en Abril 01, 2010, 09:35:14 PM

Título: [C] Simple Implementacion del cifrado Julio César
Publicado por: S[e]C en Abril 01, 2010, 09:35:14 PM
Cita de: S[e]C
En criptografía, un cifrado César, también conocido como cifrado por desplazamiento, 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 tres posiciones más adelante en el alfabeto. Por ejemplo, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con sus generales.
El cifrado César muchas veces es parte componente de sistemas más complejos de codificación, como el cifrado Vigenère, e incluso tiene aplicación en el sistema ROT13.

Fuente (http://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar)


Nota:
Como dice wikipedia el cifrado César es del tipo de cifrados por desplazamiento ( los mas simple jeje), en este caso yo lo eh implementado con un desplazamiento de tres posiciones, si se desea cambiar esto debe modificarse directamente la cadena cifrado y realizar el dezplazamiento deseado.


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


// cadenas referenciadoras para el mensaje original y cifrado
char *alfabeto="abcdefghijklmnñopqrstuvwxyz";
char *cifrado ="DEFGHIJKLMNÑOPQRSTUVWXYZABC";

//Prototipo de funciones para cifrar y decibrar el texto
char* cifra(char*);
char* descifra(char*);

//Funcion principal para probar el uso de las funciones
int main(void)
{
  char cadena[300];
  char *res;
  fprintf(stdout,"Ingrese texto a cifrar\t:\n");
  fscanf(stdin,"%s",cadena);
  res=cifra(cadena);
  fprintf(stdout,"\nLa cadena Cifrada es\t:%s\n\n",res);
  res=descifra(res);
  fprintf(stdout,"La cadena Desifrada es\t:%s",res);
  getchar();
  getchar();
  return 0;
}

//Funcion que cifra el mensaje
char* cifra(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(alfabeto);i++)
      {
         if(*(text+j)==*(alfabeto+i))
         {
         *(text+j)=*(cifrado+i);
         }
      }
    }
    return text;
}

//Funcion que descifra el mensaje
char* descifra(char *text)
{
    int i,j;
    for(j=0;j<strlen(text);j++)
    {
      for(i=0;i<strlen(alfabeto);i++)
      {
         if((*(text+j))==*(cifrado+i))
         {
         *(text+j)=*(alfabeto+i);
         }
      }
    }
    return text;
}