Cifrado polialfabético en C

julio 12 2009Se el primero en comentar

Guardado en : General, Programación

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void cifrar (char *archivo, char *llave);
void descifrar (char *archivo, char *clave);
void llamarcifrar (void);
int
main (void)
{
  int longitud = 0;
  char *llave = NULL;
  char *archivo = NULL;
  char opcion = ' ';
  archivo = (char *) malloc (sizeof (char) * 12);
  printf ("Que deseas hacer Cifrar o Descrifrar: ");
  scanf ("%c", &opcion);
  if (opcion == 'C')
    {
      printf ("Introduce el tama;o de tu clave: ");
      scanf ("%d", &longitud);
      llave = (char *) malloc (sizeof (char) * longitud);
      if (longitud > 0)
	{
	  printf ("Introduce tu clave: ");
	  scanf ("%s", llave);
	  if (strlen (llave) > 0)
	    {
	      printf ("Nombre del archivo a cifrar: ");
	      scanf ("%s", archivo);
	      cifrar (archivo, llave);
	    }
	  else
	    printf ("Necesitas una clave");
	}
    }
  else
    {
      printf ("Nombre del archivo a descifrar: ");
      scanf ("%s", archivo);
      printf ("Introduce el tama;o de tu clave: ");
      scanf ("%d", &longitud);
      llave = (char *) malloc (sizeof (char) * longitud);
      printf ("Introduce la llave: ");
      scanf ("%s", llave);
      descifrar (archivo, llave);
    } /*   free(llave);   free(archivo); */ return 0;
}
 
void
descifrar (char *archivo, char *llave)
{
  int longitud = 0;
  longitud = strlen (llave);
  FILE *origen;
  int apuntador = -1;
  unsigned char c, aux;
  origen = fopen (archivo, "r");
  if (origen == NULL)
    {
      printf ("Error al abrir el archivo");
    }
  else
    {
      while (!feof (origen))
	{
	  apuntador++;
	  c = fgetc (origen);
	  if (apuntador >= longitud)
	    apuntador = 0;
	  aux = c - llave[apuntador];
	  if (aux != '›' && aux < 255)
	    printf ("%c", aux);
	}
      apuntador = 0;
    }
  fclose (origen);
}
 
void
cifrar (char *archivo, char *clave)
{
  int longitud = 0;
  longitud = strlen (clave);
  FILE *origen, *destino;
  int apuntador = 0, aux;
  unsigned char c;
  origen = fopen (archivo, "r");
  if (origen == NULL)
    {
      printf ("Error al abrir el archivo");
    }
  else
    {
      destino = fopen ("salida.cfr", "w");
      while (!feof (origen))
	{
	  if (apuntador == longitud)
	    apuntador = 0;
	  c = fgetc (origen);
	  aux = (clave[apuntador] + c);
	  if (aux > 255)
	    fputc (aux % 255, destino);
	  else
	    fputc (aux, destino);
	  apuntador++;
	}
      fclose (destino);
    }
  fclose (origen);
  printf ("Cifrado completo");
}
Comparte esta información:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • LinkedIn
  • Technorati
  • TwitThis

Quizá te interese :

Acerca del autor: Daniel

Deja un comentario


Licencia y uso

Las técnicas demostradas en los tutoriales pueden ser utilizadas sin ninguna limitación y tampoco es obligatorio dar una atribución.


Los textos, imágenes y tutoriales son propiedad de sus respectivos autores, nuestro contenido se encuentra bajo licencia Creative Commons Share-Alike.

Escribe algo para el sitio

El escribir un tutorial o un artículo, mandarnos un enlace para Ubicuos, no solamente es una forma de obtener publicidad, si no también de dar algo a la comunidad y nosotros te lo recompensamos con los premios del mes! Leer más de nuestras promociones

¿Sugerencias?

Este es TU sitio, si tienes sugerencias o ideas de cómo podemos mejorarlo para ti, ¡Por favor háznoslos saber!

Hacemos nuestro mayor esfuerzo en proporcionar un sitio útil y amigable y esperamos que disfrutes tu tiempo aquí.

Ayuda a Difundir

Te gusta Ubicuos?

Ve las formas en que nos puedes apoyar.

Apoyando a Ubicuos.com

Submit your linkClose