2008
05.22

Creo haber prometido un programa que desencripta los mensajes que encripta su análogo. Helo aquí.

Su funcionamiento es idéntico al del otro, sólo que en vez de sumar módulo 26 la clave, se resta módulo 26.

Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, char **argv) {

/*Definimos las variables. Son los ficheros a utilizar (el de la clave, el resultado y el del mensaje) y una variable para manejar cómodamente argv*/
FILE *mensaje;
mensaje = (FILE *) malloc (sizeof (FILE));
FILE *clave;
clave = (FILE *) malloc (sizeof (FILE));
FILE *resultado;
resultado = (FILE *) malloc (sizeof (FILE));
int cadena = 2, i, h;

/*Comprobamos que se hayan pasado bien los datos*/
if (argc != 4) {
/*Explicamos cÃmo usar el programa y salimos */
printf (”Modo de empleo: %s [fichero-con-la-clave] [fichero-con-el-mensaje] [tamanio-de-la-clave]\n”, argv [0]);
return 1; }

/*Comprobamos si existen los ficheros*/
if ((mensaje = fopen (argv [2], “rt”)) == NULL || (clave = fopen (argv [1], “rt”)) == NULL) {
printf (”Fichero no encontrado\n”);
return 1; }

/*Variables que tendrÃn la clave y el mensaje en modo int*/
int Clave [1024], Mensaje [8196], g;

/*Pasamos la clave y el mensaje (en nÃmeros del 1 al 27) a los vectores*/
for (i = 0; feof (clave) == 0; i ++) {
fscanf (clave, “%d”, &Clave [i]);
fgetc (clave); }

for (i = 0, h = 0, g = 1; feof (mensaje) == 0; i ++, h ++, g ++) {
if (h == 5) { /*Desechamos los espacios*/
fgetc (mensaje);
h = 0; }
Mensaje [i] = (int) fgetc (mensaje) – ‘a’ + 1; }

int Resultado [8196];

/*Pasemos a desencriptar*/
for (i = 0, h = 0; i < g; i ++, h ++) {
/*Si usamos todos los nÃmeros de la clave, volvemos al primero*/
if (h == atoi (argv [3]))
h = 0;

Resultado [i] = Mensaje [i] – Clave [h];

if (Resultado [i] > 26)
Resultado [i] += 26; }

/*Arbimos el fichero que tendrálos resultados*/
resultado = fopen (”Resultado.txt”, “wb”);

/*Escribimos el mensaje original en el fichero en el formato anterior, grupos de cinco letras*/
for (i = 0, h = 0; i < g; i ++, h ++) {
if (h == 5) {
fprintf (resultado, ” “);
h = 0; }

Resultado [i] += ‘a’;
Resultado [i] -= 1;
fprintf (resultado, “%c”, Resultado [i]); }

printf (”El fichero Resultado.txt, ubicado en la carpeta donde ejecutó el programa, tiene el mensaje original\n”);

fclose (mensaje);
fclose (clave);
fclose (resultado);
/*Y con esto, tenemos el encriptador y el desencriptador*/
return 0;
}

No Comment.

Add Your Comment