Scusami, avevo capito male io..
Ho provato a cambiare un po le letture e le scritture e in questo modo funziona, anche col calcolo della potenza come l'avevo scritto..
codice:
int CalcolaPotenza( int N, int e, uint64_t r )
{
int ris = 1;
for ( ; e > 0; e-- ){
ris = (ris*N)%r;
}
cout << "ris = " << ris << endl;
return ris;
}
int Codifica( int esp, uint64_t mod )
{
char CarCorrente, Car;
uint64_t tmp;
ifstream leggi(NomeFileIn);
if ( !leggi )
return 1;
ofstream scrivi(NomeFileOut);
if ( !scrivi )
return 2;
while( (CarCorrente = leggi.get()) != EOF )
{
tmp = static_cast<uint64_t>(CarCorrente);
tmp = CalcolaPotenza(tmp, esp, mod);
scrivi << tmp << " ";
}
return 0;
}
int Decodifica( int esp, uint64_t mod )
{
uint64_t IntCorrente, IntConv;
char tmp;
ifstream leggi(NomeFileIn);
if ( !leggi )
return 1;
ofstream scrivi(NomeFileOut);
if ( !scrivi )
return 2;
while( leggi >> IntCorrente )
{
IntConv = CalcolaPotenza(IntCorrente, esp, mod);
tmp = static_cast<char>(IntConv);
scrivi.put(tmp);
}
return 0;
}
Funziona con chiavi piccole, ma per chiavi molto grandi non funziona, non so perchè.. in teoria la funzione moltiplica scritta in quel modo dovrebbe tenere basso il risultato e non avere problemi di overflow.. strano