/* __ ___ _ / \ | \ | | /\-----------< xor.c >----------------------------- / /\ \| |\ \| |/ / Cripta/Decripta un file facendo lo XOR dei dati / /__\ \ /| / con una chiave inserita dell'utente. \______/ |\ \| | \ ----------|_| \_\_|\_\ A XOR B = C XOR B = A Autore: Feresin Enrico (ORK) e-mail: orkmail@libero.it */ #include #include #include #include #define LUNGPAD 64 #define LUNGFILE 64 void cript (char *, char *, int); main(int argc, char *argv[]) { FILE *file1, *file2; char f1[LUNGFILE], f2[LUNGFILE]; char *mem, pad[LUNGPAD]; long file1lung; // Chiede in input il nome del file di input printf("Digita il nome del file sorgente: "); fgets(f1,LUNGFILE , stdin); // Se l'ultimo carattere è un \n lo elimina if (f1[strlen(f1)-1]=='\n') f1[strlen(f1)-1]=0; // Apre il file in lettura file1 = fopen(f1, "r"); if (file1 == NULL) { printf("Errore di apertura nel file -%s-\n",f1); exit(-1); } // Chiede in input il nome del file di output printf("Digita il nome del file destinazione: "); fgets(f2,LUNGFILE , stdin); // Se l'ultimo carattere è un \n lo elimina if (f2[strlen(f2)-1]=='\n') f2[strlen(f2)-1]=0; // Apre il file in scrittura file2 = fopen(f2, "w"); if (file2 == NULL) { printf("Errore di apertura nel file %s\n",f2); exit(-1); } // Chiede in input la chiave con cui criptare il file printf("Digita la chiave: "); fgets(pad, LUNGPAD, stdin); // Se l'ultimo carattere è un \n lo elimina if (pad[strlen(pad)-1]=='\n') pad[strlen(pad)-1]=0; // La chiave non può essere vuota lunga ... if (strlen(pad)==0) { printf("La chiave non può essere vuota\n"); exit(-1); } fseek(file1, 0, SEEK_END); // Si porta alla fine del file da criptare ... file1lung = ftell(file1); // legge la lunghezza ... rewind(file1); // e si riposiziona all'inizio del file // Alloca una zona di memoria abbastanza grande da contenere l file mem = (char *) malloc(file1lung); if (mem == NULL) { printf("Errore nell'allocazione della memoria\n"); exit(-1); } // Legge il file in memoria fread(mem, 1, file1lung, file1); // Cripta la zona di memoria cript(mem, pad, file1lung); // Scrive sul file di output il contenuto criptato fwrite (mem, 1, file1lung, file2); // Rilascia la memoria allocata free (mem); // Chiude i files fclose(file1); fclose(file2); } void cript (char *buff, char *pad, int lung) { int h, lungpad; lungpad=strlen(pad); // Ciclando per tutta la lunghezza del buffer ... for (h=0;h