Cifrado polialfabético en C

julio 12 20093 comentarios

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");
}

Quizá te interese :

Acerca del autor:

3 Respuestas a “Cifrado polialfabético en C”

  1. david dice:

    que tal queria preguntarte acerca de este programa en cuanto a su funcionamiento, ya que no soy un programador ni nada parecido, ya lo corri pero lo que pasa es que siempre me dice al final que error al abrir el archivo no se la verdad que colocar cuando me pide la llave, el nombre del archivo en si que es?, y el tamaño de la clave agradeceria bastante si me lo explicases porfavor. de ante mano gracias.

  2. Daniel dice:

    Hola!
    El cifrado polialfabético http://www.dma.fi.upm.es/java/matematicadiscreta/aritmeticamodular/polialfabeto.html te puede aclarar los detalles, esta es una implementación mínima (y muy elemental siguiendo el concepto base, que es tomar series diferentes para cada letra).
    Saludos.

  3. jose luis dice:

    ola que tal quisiera saber si no tendras un codijo en c++ que sea un encriptador donde te pida el texto que quieres encriptar las tramas y el corrimiento y que lo encripte por fa ayudame es para un examen

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

-->