sono approdato a questa nuova versione dello script...
esegue tutte le operazioni correttamente, ma prima di chiudersi da errore e si termina e non riesco a capire il motivo...
ancora grazie


codice:
#include <stdio.h>

int main (void){

    long lbuffer = 60000; //determina sia il buffer di lettura che la lunghezza della chiave
    char progkey = 100;
    long xmega = 1048576/lbuffer;
    printf("buffer impostato a %d bytes\n",lbuffer);
    
    char nomefile[20];
    printf("nome del file da crittografare:");
    scanf("%s",nomefile);
    printf("%s!\n",nomefile);

    char nomechiave[20];
    printf("nome del file chiave:");
    scanf("%s",nomechiave);
    printf("%s!\n",nomechiave);

    //preparazione della chiave
    char *kbuf;
    kbuf = new char [lbuffer];

    char *chiave;
    chiave = new char [lbuffer];
    FILE *keyfile;
    if ((keyfile = fopen(nomechiave, "rb")))
	{
		size_t a;
        long x=0;
		while( a = fread( kbuf, 1, lbuffer, keyfile) ) {
            x=x+lbuffer;
            /* ciclo di creazione chiave */ int y;  
            for(y=0;y<=a;y++) chiave[y]=chiave[y]+kbuf[y]; 
            
            if((x%xmega)==0) //informazioni sullo stato del processo
            printf("creazione chiave: %dMb analizzati\n",(x/1048576));
            
        }
	    fclose(keyfile);
    }
    printf("\n\nchiave creata!!!!!\n\n");
    
    //inizio processo per la scrittura del nuovo file
    char *buf;
    buf = new char [lbuffer];
    FILE *f, *f_out;
    if ((f = fopen(nomefile, "rb")) && (f_out = fopen("cript.crp", "wb")))
	{
		size_t b;
        long x=0;
		while( b = fread( buf, 1, lbuffer, f) ) {

            x=x+lbuffer;
            
            /* ciclo di cifratura */ int y;  
            for(y=0;y<=b;y++) buf[y]=buf[y]+chiave[y]+progkey; 
            
            if((x%xmega)==0) //informazioni sullo stato del processo
            printf("%dMb\n",(x/1048576));
            
            fwrite( buf, 1, b, f_out);

        }
	    fclose(f);
	    fclose(f_out);

	}
    
    
    return 0;   
}