//******** created by mamo139 ********// #include #include #include #include double * frequenze_load(double *,char *,long,long); double * sort(double *,double *); double * sort_indicizzato(double *frequenza,double *frequenza_in, char *indice); int decifra(char * key, char * file, char * file2); int main () { long MAXchiave = 50; //lunghezza di chiave massima da cercare long x=0,y=0,z=0,k=0;//dichiaro le variabili double varianza=0,varianza_group=0; double *frequenzebase,*frequenzebase_sort; double *frequenzecript,*frequenzecript_sort; double * frequenze; double *varianze; varianze = (double *) malloc((MAXchiave+1) * sizeof(double)); varianze[0]=0; frequenzebase = (double *) malloc(256 * sizeof(double)); frequenzebase_sort = (double *) malloc(256 * sizeof(double)); frequenzecript = (double *) malloc(256 * sizeof(double)); frequenzecript_sort = (double *) malloc(256 * sizeof(double)); frequenze = (double *) malloc(256 * sizeof(double)); char *indicebase; indicebase = (char *) malloc(256 * sizeof(char)); for(x=0;x<256;x++) indicebase[x]=x; //prendo le frequenze del vocabolario frequenzebase = frequenze_load(frequenzebase,"vocabolario.txt",0,1); frequenzebase_sort = sort_indicizzato(frequenzebase_sort,frequenzebase,indicebase); for(x=0;x<256;x++) printf("%d:(%d) %c %f\n",x,(unsigned char)indicebase[x],indicebase[x],frequenzebase_sort[x]); getchar(); for(x=1;x<=MAXchiave;x++){ //trovo le varianze di ogni lunghezza di chiave printf("\nx = %d\n",x); varianza_group=0; for(y=0;yfrequenza[(x-1)]){ temp=frequenza[x]; frequenza[x]=frequenza[(x-1)]; frequenza[(x-1)]=temp; operations++; } } } return frequenza; } double * sort_indicizzato(double *frequenza,double *frequenza_in, char *indice){ long operations=1,x=0; for(x=0;x<256;x++) frequenza[x]= frequenza_in[x]; double temp=0; char temp2=0; while(operations != 0){ operations = 0; for(x=1;x<256;x++){ if(frequenza[x]>frequenza[(x-1)]){ temp=frequenza[x]; temp2=indice[x]; frequenza[x]=frequenza[(x-1)]; indice[x]=indice[(x-1)]; frequenza[(x-1)]=temp; indice[(x-1)]=temp2; operations++; } } } return frequenza; } //*** questa parte di codice è un po brutta ***// int decifra(char * key, char * file, char * file2) { FILE * pFile; pFile = fopen ( file , "rb" ); long lSize,b,x,keyl=strlen(key); printf("\n\nDECIFRAZIONE avviata con key: %s\n",key); fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); fclose (pFile); pFile = fopen ( file , "rb" ); char *buf; buf = (char *) malloc(lSize * sizeof(char)); b=fread( buf, 1, lSize, pFile); fclose (pFile); FILE * f_out; f_out = fopen ( file2 , "wb" ); for(x=0;x