Tips&Tricks I trucchi del mestiere

 

Nascondere il testo rendendolo illeggibile


Si tratta di una piccola implementazione di un algoritmo per nascondere del testo in chiaro e renderlo illeggibile, almeno per un po' di tempo. Si basa sullo scambio di posizione e di carattere in modo variabile. La fase di crittazione richiede di inserire il nome del file di testo da trasformare, che dovrα essere presente nella cartella dell'eseguibile, e lo trasforma in "crypted.dat". La fase di decrittazione, invece, carica automaticamente tale file ("crypted.dat"), che sarα presente nella cartella dell'eseguibile, e lo trasforma in un file di testo il cui nome viene richiesto in fase di elaborazione.
Tip fornito dal sig. C.Calabr≥

#include 
#include 
#include 

 char filename[255];
 string buffer1, buffer2;
 int n_lettere, scelta;

 fstream orig;
 fstream dest;

 void crypto(), decrypto();

void main()
{

 cout<<"Benveuto in Crypto, di Cristiano Calabro'"<<endl;
 cout<<"Vuoi: \t1 => criptare \n\t2 => decriptare"<<endl;
 cout<<"\n\tScelta => ";
 cin>>scelta;

 switch(scelta)
 {
  case 1:
   crypto(); break;

  case 2:
   decrypto(); break;
  }

 system("PAUSE");
}

void crypto()
{
  cout<<"\n\nInserisci il nome del file da aprire (comprensivo di estensione) => ";
  cout<<"\n\tNome del file => ";
  cin>>filename;

  orig.open(filename, ios::in);
  dest.open("crypted.dat", ios::out);

  if (!orig)
    cout<<"Errore nell'apertura del file"<<endl;
   else
   {
    orig.seekg(ios::beg); //posiziono il puntatore all'inizio del file
    while(!orig.eof())
    {
    orig>>buffer1; //carico in buffer la prima parola  n_lettere=buffer1.size(); //n_lettere Θ un intero che contiene la quantitα di lettere della parola
    n_lettere=buffer1.size(); //n_lettere Θ un intero che contiene la quantitα di lettere della parola

  /* Segue il cuore del prgramma */
     for (int i=n_lettere-1; i>=0; i--) //mi muovo di carattere in carattere a ritroso
     {
      buffer2[(n_lettere-1)-i]=buffer1[i]+n_lettere; //Scrivo in buffer2 il caratteri traslati di n_lettere e ruotati di n_lettere_posizioni
      dest<<buffer2[(n_lettere-1)-i];
     }
     dest<<" ";
    };
/* Termine del cuore del programma */
   cout<<"File criptato con successo!"<<endl;
   }
 orig.close();
 dest.close();
}

void decrypto()
{
  orig.open("crypted.dat", ios::in);
  cout<<"Inserisci il nome del file sul quale scrivere (sara' di tipo tuonome.txt) => ";
  cout<<"\n\tNome del file => ";
  cin>>filename;
  strcat(filename,".txt");

  dest.open(filename, ios::out);

  if (!orig)
    cout<<"Errore nell'apertura del file"<<endl;
    else
    {
    orig.seekg(ios::beg); //posiziono il puntatore all'inizio del file
     do
     {
     orig>>buffer1; //carico in buffer la prima parola  n_lettere=buffer1.size(); //n_lettere Θ un intero che contiene la quantitα di lettere della parola
     n_lettere=buffer1.size(); //n_lettere Θ un intero che contiene la quantitα di lettere della parola

  /* Segue il cuore del prgramma */
     for (int i=n_lettere-1; i>=0; i--) //mi muovo di carattere in carattere a ritroso
     {
      buffer2[(n_lettere-1)-i]=buffer1[i]-n_lettere; //Scrivo in buffer2 il caratteri traslati di n_lettere e ruotati di n_lettere_posizioni
      dest<<buffer2[(n_lettere-1)-i];
     }
     dest<<" ";
     }while(!orig.eof());
/* Termine del cuore del programma */
   cout<<"File decriptato con successo!"<<endl;
   }
 orig.close();
 dest.close();
}