#include void decript (char *, char *, int); /* Prototipo di funzione */ main(int argc, char *argv[]) { FILE *file1, *file2; char *tutto, pad[16]; long file1lung, file2lung, file3lung; if (argc<5) { printf("USO: %s file1 file2 num:\n",argv[0]); printf("file1 - file JPG\n"); printf("file2 - nome del file di Output\n"); printf("Bytes - numero di byte dell'immagine originale\n"); printf("Pad - numero iniziale del pad\n"); exit(-1); } file1 = fopen(argv[1], "r"); if (file1 == NULL) { printf("Errore di apertura nel file %s\n",argv[1]); exit(-1); } file2 = fopen(argv[2], "w"); if (file2 == NULL) { printf("Errore di apertura nel file %s\n",argv[2]); exit(-1); } /* Trova la lunghezza dei 3 files */ fseek(file1, 0, SEEK_END); file1lung = ftell(file1); file2lung = atoi(argv[3]); file3lung = file1lung-file2lung; if (file2lung>file1lung) { printf("Parametro \"Bytes\" sbagliato\n"); exit(-1); } /* Legge solo la parte dei dati criptati */ rewind(file1); fseek(file1, file2lung, SEEK_CUR); tutto = (char *) malloc(file3lung); fread(tutto, 1, file3lung, file1); /* Crea la chiave che servira' per decriptare i dati */ rewind(file1); fseek(file1, atoi(argv[4]), SEEK_CUR); fread(pad, 1, 16, file1); /* Decripta i dati */ decript(tutto, pad, file3lung); /* Salva i dati sul file */ fwrite (tutto, 1, file3lung, file2); fclose(file1); fclose(file2); } void decript (char *buff, char *pad, int lung) { int h; for (h = 0; h < lung; h++) { buff[h]^=pad[h%16]; } }