# Shkenca > Informatikë dhe Internet > Arti i programimit >  Sfida nga PR-TECH: Më shto. Kripto.

## edspace

_Sfida është hapur nga Grupi Teknologjik i Prishtinës. Po e hedhim në forum që anëtarët të mund të diskutojnë zgjidhjet dhe të mësojnë nga eksperienca e njëri-tjetrit. Tema do qëndrojë e mbyllur gjatë kohës që sfida është e hapur dhe zgjidhja juaj nuk duhet bërë publike gjatë kësaj kohe. Kur të skadojë afati i lejuar, tema do hapet dhe pastaj mund të postoni përgjigjet tuaja dhe të diskutoni me anëtarët e tjerë._

Më shto. Kripto. 
Problemi eshte i hapur
Prej:17/11/2004     Deri:30/11/2004

Për t'a zgjedhur këtë sfidë do t'ju nevojitet t'a zbuloni algoritmin me të cilin bëhet enkriptimi dhe dekriptimi i mesazheve. E vetmja gjë që ju ofrohet është që mesazhi:



```
Shembull i mesazhit te enkriptuar.
```

Rezulton në:



```
104 187 109 210 117 215 108 216 105 137 109 141 115 216 122 219 105
209 32 148 101 217 101 133 107 217 105 219 116 228 97 214 46 160
```

Ju duheni t'a krijoni një skriptë e cila do t'a bën dekriptimin e suksesëshëm të mesazhit të enkriptuar që gjendet më poshtë:



```
101 176 98 207 110 211 117 220 106 214 32 129 115 216 116 220 32 133
101 214 101 209 105 220 100 132 101 215 116 222 115 147 107 224 101 
216 105 220 33 149
```

Skripta mundet të bëhet në C, C++, Java, ose Perl. Nëse programi juaj përmbanë më shumë se një skedar atëherë le të arkivohet si tar.gz apo zip dhe si i tillë le të dërgohet në *programim ET pr-tech PIKË net*.
Rrezultatet dhe kodet e sakta do të paraqiten deri më 1 javë pas skadimit të afatit të problemit.

----------


## edspace

Ja përgjigja ime në C++ për këtë sfidë. 



```

// Emri: Deshifrimi
// Data: 25/11/04 
// Pershkrim: Sfida e Javes nga Grupi Teknologjik i Prishtines 
// Perpiluesi: Dev-C++ 4.9.9.0 
// Perdorimi: Shkruani mesazhin e shifruar dhe programi do e deshifroje
// psh: 101 176 98 207 110 211 117 220 106 214 32 129 115 216 116 220 
//      32 133 101 214 101 209 105 220 100 132 101 215 116 222 115 147 
//      107 224 101 216 105 220 33 149
//      => Kembengulja eshte qelesi drejt suksesit!
 #include <iostream>     // input output
#include <string>       //  per vargjet
#include <vector>       //  per vektoret
#include <sstream>      //  per copetimin e mesazhit te shifruar
 using namespace std;
 // ***********************************************************
// merr nje varg s me kodet e ASCII
// kthen vektorin v me elementet ASCII si int
// vektori mbushet vetem kur  0 < kodet < 511
// kodet e tjere jane te pavlefshem per algoritmin e shifrimit
//
void copeto_ascii(const string & s, vector<int> & v);
 // ***********************************************************
// merr nje vektor me kodet te ASCII
// kthen vargun e deshifruar
//
string deshifro(const vector<int> & v);
 int main(int argc, char *argv[])
{
  string mesazhi_str = "";          // mesazhi si tekst
  vector<int> mesazhi_shifruar;     // mesazhi i shifruar si vektor
    
  cout << "Shkruaj mesazhin e shifruar: ";
  getline(cin, mesazhi_str);        // marrim mesazhin e shifruar
  
  copeto_ascii(mesazhi_str, mesazhi_shifruar);  // e hedhim ne vektor
  
  if( mesazhi_shifruar.empty() )    // nqs vektori eshte bosh
  {                                 
      cerr << "GABIM: Mesazhi i shifruar eshte i gabuar." << endl;
      return 0;
  }    
  
  if( (mesazhi_shifruar.size() % 2) != 0 ) // nqs kemi nje numer tek kodesh
  {   // shifra e parafundit nuk mund te deshifrohet, prandaj nxjerrim gabim
      cerr << "GABIM: Shkronja __ nuk mund te deshifrohej." << endl;
  }
   cout << "Mesazhi i deshifruar: " << deshifro(mesazhi_shifruar) << endl;
  
  return 0;
}
 //**************************************************************
 void copeto_ascii(const string & s, vector<int> & v)
{
    stringstream rjedhje(s); // formojme nje burim vargjesh
    string numri_str;
    int numri_ascii;
    
    while( rjedhje >> numri_str )  // per cdo fjale te burimit
    {
        numri_ascii = atoi(numri_str.c_str());  // e kthejme ne numer
        if( numri_ascii < 1 || numri_ascii > 510 ) // nqs nuk eshte i vlefshem per shifrim
        {
            v.clear();    // fshijme vektorin
            return;        // ndalojme funksionin
        }
        v.push_back(numri_ascii);    // hedhim numrin e sakte ne matricen e mesazhit
    }    
}
 //**************************************************************
 string deshifro(const vector<int> & v)
{
    string vargu = "";    
    size_t p = 1;
    size_t q = 0;
     while( p < v.size() )    // per cdo element te matrices
    {
        vargu.append( 1, char(v[p]-v[q]) );     // deshifrojme shkronjen e pare
        vargu.append( 1, char(v[q]) );         // deshifrojme shkronjen e dyte
        p += 2;                                // vazhdojme me ciftin tjeter
        q += 2;                                
    }    
    
    if( q < v.size() )    // nqs kemi nje numer tek shkronjash
    {
        vargu.append( 1, char('_') );    // shkronja e parafundit nuk mund te deshifrohet
        vargu.append( 1, char(v[q]) );  // deshifrojme shkronje e fundit
    }    
    
    return vargu;    // kthejme rezultatin
} 


```

Si gjithmonë janë të mirëpritura kritikat.

----------


## werewolf

imja ne c (ketu i kam shtuar ca 'komente' (komente i thencin!  :pa dhembe:   )


```

#include <stdio.h>
 /*
 * decrypt.c
 * Me shto.Kripto
 * w3r3w0lf
 * [email]dori179@gmail.com[/email]
 * 18/11/2004
 *******************************
 * perdorimi:  #>decrypt filename      
    ku : 
         'decrypt' eshte emri me te cilin eshte kompiluar kodi
         'filename' eshte emri i skedarit ku ndodhet teksti per tu dekriptuar
           
  
         
*/
 int main (int argc, char* argv[]){
   FILE* inputFile;
   int current,next, hold;
    if(argc<2){                        
     puts("perdorimi: decrypt filename");  
     return 1;
   }
   
            
   if ((inputFile = fopen(argv[1],"r")) == NULL){    //hapim ne lexim skedarin qe ka textin
      puts("could not open input file");
      return 1;
    }
 
   while(!feof(inputFile)){          //lexojme deri sa te mbaroje texti ne file  
         fscanf(inputFile,"%d",&next);      //marrim kodin e pare 
         fscanf(inputFile,"%d",&hold);      //marrim te dytin    
         printf("%c%c",hold-next,next);    //acsii(i)=hold-next, ascii(i+1) = next.
         next=10;   //keto te dyja si mbaj mend pse i kam vene po nejse...... zere se nuk jane
         hold=20;
    }
    puts("");
    
     return 0;
 } 


```

----------

