cifra.c

#include <stdio.h>

#define MAX 100

typedef struct {
char messaggio[MAX];
int dim;
} EMAIL;



char sommaChar(char a, char b) {
return a + b;
}

/* acquisice da tastiera il testo del messaggio e restituisce una
variabile di tipo EMAIL contenente il testo letto e la sua
dimensione opportunamente calcolata */

EMAIL leggiMessaggio() {

EMAIL e;

e.dim = 0;

printf("Inserisci il testo del messaggio: ");
gets(e.messaggio);

/* calcolo la dimensione del messaggio letto NB: alternativamente si
poteva anche usare la funzione strlen(stringa), disponibile in
string.h, che restituisce la lunghezza della stringa passata come
parametro */

while(e.messaggio[e.dim] != '\0') {
e.dim = e.dim + 1;
}

return e;

}

/* riceve come parametro un messaggio e ne cifra il testo utilizzando
la chiave fornia come secondo parametro */

void cifraMessaggio(EMAIL *msg, char key[]) {

int i, j;
int dim = 0;
/* calcolo la dimensione della chiave */
while(key[dim] != '\0') {
dim = dim + 1;
}

/* j è il contatore che utilizzo per scorrere la chiave: viene
incrementato ad ogni iterazione del ciclo for e riazzerato quando
diventa pari a dim (ossia la lunghezza della chiave) */

j = 0;

for(i = 0; i < msg->dim; i = i + 1) {
msg->messaggio[i] = msg->messaggio[i] + key[j];

j = j + 1;
if(j == dim) {
j = 0;
}
}

/* non c'è nessun return poichè siccome msg è un puntatore, ho
modificato direttamente il testo del messaggio */


}

void decifraMessaggio(EMAIL *msg, char key[]) {

int i,j;
int dim = 0;
/* calcolo la dimensione della chiave */
while(key[dim] != '\0') {
dim = dim + 1;
}

/* compio le stesse operazioni effettuate per cifrare il messaggio
con l'unica differenza che sottraggo invece di sommare */

j = 0;
for(i = 0; i < msg->dim; i = i + 1) {
msg->messaggio[i] = msg->messaggio[i] - key[j];

j = j + 1;
if(j == dim) {
j = 0;
}
}
}

void main() {

EMAIL lettera;
char chiave[MAX];

lettera = leggiMessaggio();

printf("Inserisci la chiave ");
gets(chiave);

cifraMessaggio(&lettera, chiave);
printf("Il messaggio cifrato è \"%s\"\n", lettera.messaggio);

decifraMessaggio(&lettera, chiave);
printf("Il messaggio decifrato è \"%s\"\n", lettera.messaggio);

}

Generated by GNU enscript 1.6.4.