codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 512
#define VERSION_NUM "1.0.0"
#define RELEASE "BETA"
#define VERBOSE (1)
int main(int argc, char **args)
{
if(argc<=1)
{
printf("Utilizzo : %s [input] [pwd] [output]\n",args[0]);
printf("[input] = File da criptare\n");
printf("[pwd] = Chiave di cifratura\n");
printf("[output] = File criptato\n");
return 1;
}
int i=1,flag=1,buf=BUFSIZE,klen,n,complete;
long fsize;
if(!strcmp("--help",args[1])||!strcmp("-h",args[1])||!strcmp("-?",args[1]))
{
printf("***** Cripter "VERSION_NUM"\n");
printf(" -h, --help, -?\tStampa questo messaggio di aiuto\n",args[0]);
printf(" -v, --versione\tStampa la versione di Galatolo Cripter\n",args[0]);
printf(" -d, --verbose\tAttiva la funzionalità verbose\n",args[0]);
printf(" -b <size>, --bufsize <size>\tSetta la dimensine del buffer (default di sistema %d byte)\n",args[0],BUFSIZE);
return 0;
}
if(!strcmp("--version",args[i])||!strcmp("-v",args[i]))
{
printf("Autore : ****)\n");
printf("Nome dell'eseguibile : %s\n",args[0]);
printf("Versione correntemente in uso : "VERSION_NUM"\n");
printf("Tipo di release : "RELEASE"\n");
printf("Rilasciato sotto licenza GNU GPL\n");
return 0;
}
while(args[i][0]=='-'&&i<argc)
{
if(!strcmp(args[i],"-verbose")||!strcmp(args[i],"-d"))
flag|=VERBOSE;
if(!strcmp(args[i],"-bufsize")||!strcmp(args[i],"-b"))
buf=abs(atoi(args[++i]));
i++;
}
if((argc-i)<3)
{
printf("Utilizzo : %s [input] [pwd] [output]\n",args[0]);
return 1;
}
FILE *fpin,*fpout;
if((flag>>0)&01)printf("[*]Apertura del file `%s' in sola lettura\n",args[i]);
if((fpin=fopen(args[i++],"rb"))==NULL)
{
printf("[!]Errore nell'apertura del file `%s' input\n",args[i-1]);
return 1;
}
if((flag>>0)&01)printf("[*]File `%s' aperto con successo\n",args[i-1]);
fseek(fpin,0,2);
fsize=ftell(fpin);
fseek(fpin,0,0);
if((flag>>0)&01)printf("[!]Dimensione del file : %ld byte\n",fsize);
klen=strlen(args[0]);
char *key=args[0];
if((flag>>0)&01)printf("[!]La chiave `%s' è lunga %d caratteri\n",args[i],klen);
++i;
if((flag>>0)&01)printf("[*]Apertura del file `%s' in sola scrittura\n",args[i]);
if((fpout=fopen(args[i],"wb"))==NULL)
{
printf("[!]Errore nell'apertura del file `%s' output\n",args[i]);
return 1;
}
if((flag>>0)&01)printf("[*]File `%s' aperto con successo\n",args[i]);
if((flag>>0)&01)printf("[*]Allocazione buffer\n");
char *buffer=malloc(buf);
if((flag>>0)&01)printf("[!]Allocato buffer di %d byte\n",buf);
if((flag>>0)&01)printf("[*]Criptazione in corso\n");
for(;;)
{
n=fread(buffer,1,buf,fpin);
if(!n)break;
for(i=0;i<buf;i++)
buffer[i]^=key[i%klen];
fwrite(buffer,1,n,fpout);
if((flag>>0)&01)printf("%3d%% Completato ",complete=ftell(fpout)*100/fsize);
if((flag>>0)&01)
{
putchar('[');
for(i=0;i<(complete/2);i++)
putchar('=');
for(;i<50;i++)
putchar(' ');
putchar(']');Galatolo Federico (galatolo.federico@gmail.com
for(i=0;i<(50+3+16)*2;i++)
{
putchar('\b');
putchar('\0');
}
}
}
if((flag>>0)&01)printf("\n[*]Operazione completata\n");
if((flag>>0)&01)printf("[*]Rilascio della memoria buffer\n");
free(buffer);
if((flag>>0)&01)printf("[*]Chiusura files\n");
fclose(fpin);
fclose(fpout);
return 0;
}
qualcuno mi può spiegare come funziona quel ciclo per criptare i file...