Contest Programmazione Estate Tebigeek 2016!

In questa sezione verranno pubblicati Contest ai quali potranno partecipare tutti gli Utenti. Ogni contest ha le proprie regole.

Moderatore: Moderatore in prova

Avatar utente
Giuseppe La Gualano
Founder
Founder
Messaggi: 562
Contatta:

Contest Programmazione Estate Tebigeek 2016!

Messaggio#1 » 02/08/2016, 11:25

Salve a tutti,
questo è il primo codice che pubblico, in onore dei nuovi cambiamenti estivi 2016, sperando che sia a tutti di grande aiuto soprattutto il nuovo Codebox!

Immagine
Come da titolo, presento un Contest basato sulla crittografia da principiante. Infatti non è altro che un semplicissimo simulatore della macchina cifrante elettrica Enigma, utilizzata dalle forze armate tedesche durante la seconda guerra mondiale.

Chiaramente il sistema crittografico usato all'interno di questo simulatore è ideologicamente simile, ma praticamente diverso dalla realtà. E' basato sul progetto reperito su questo sito che, presentando molti difetti, è stato sostanzialmente modificato con un funzionamento del tutto differente (basti provare entrambi i codici per verificare in modo rapido).

L'idea di questo Contest è proporvi questo banalissimo codice di libera licenza e di farne uscire qualcosa di nuovo.

Il codice che vi sto per presentare, non avrà difetti rilevanti e proprio per questo sarà semplice da riadattare in un qualsiasi altro contesto che non sia necessariamente un simulatore enigma di livello avanzato.

Lo scopo del contest è chiaramente sviluppare un programma , basato sul sistema crittografico di enigma, semplice o complesso che sia, che dia vita ad un progetto molto più articolato.
Ad esempio, si potrebbe sviluppare un form di login basato su una combinazione di 9 cifre che a loro volta modifichino la decifratura di Username e Password successivamente inseriti.

Ovviamente questo è solo un esempio! Ci sono N programmi possibili da poter sviluppare.

Come e cosa si vince?

Questo Contest ha come obbiettivo lo scambio culturale nell'ambito della programmazione software, quindi ,come ovvio potrebbe sembrare, vincerà il programma più interessante (non per forza il più complesso!). I programmi verranno esaminati a fondo e verranno valutati da una giuria imparziale.
Il vincitore avrà il pregio di poter pubblicare il suo programma ufficializzato da Tebigeek.com ed inoltre provvederemo ad una sponsorizzazione corposa nei motori di ricerca e nei social in modo da evidenziare molto la creazione del concorrente e quindi la persona stessa! Diamo questa opportunità all'utente che ci dimostrerà di avere creatività.
Per vincere, bisogna anche seguire il regolamento sottostante.

Le regole del contest sono molto semplici:

  • Essere iscritti al Forum di Tebigeek.com .
  • Essere Fan della nostra Pagina Facebbok.
  • Aver messo "Like" al post inerente al Contest che sarà pubblicato sulla Fan Page ed averlo condiviso sul proprio profilo.
  • Non copiare codici degli altri concorrenti.
  • Il codice deve compilare!
  • Attenersi al Regolamento generale di Tebigeek.com.

Il Contest parte da oggi e si concluderà Martedì 9/08/2016 .
Unica pecca è che il contest non avrà validità se non includerà almeno 10 partecipanti (eventuali multiaccount verranno identificati ed esclusi).
Si partecipa seguendo i punti del regolamento del contest e chiaramente pubblicando il codice utilizzando il Codebox (a questo link trovate le novità del Forum e la spiegazione).

  1.  
  2. /**
  3.  * @author Giuseppe La Gualano - <!-- m --><a class=\"postlink\" href=\"http://www.tebigeek.com\">http://www.tebigeek.com</a><!-- m -->
  4.  * @license This software is free - <!-- m --><a class=\"postlink\" href=\"http://www.gnu.org/licenses/gpl.html\">http://www.gnu.org/licenses/gpl.html</a><!-- m -->
  5.  */
  6.  
  7. #include <iostream>
  8. #include <stdlib.h>
  9. #include <cstdlib>   // PER RAND()
  10. #include <ctime>     // PER TIME(NULL)
  11. using namespace std;
  12.  
  13. int main()
  14. {
  15.         srand((unsigned)time(NULL)); // AZZERO IL RANDOM (SEED)
  16.         char lettera;
  17.         int input,opzione,x,x1,x2,x3,x4,x5,x6,x7,x8,x9;
  18.  
  19.         //PRESENTAZIONE PROGRAMMA
  20.         cout<<endl<<"    -------------------------";
  21.         cout<<endl<<"    | SIMULATORE ENIGMA C++ |";
  22.         cout<<endl<<"    -------------------------\n";
  23.         cout<<"\nBenvenuto nel simulatore di Enigma"<<endl;
  24.  
  25.         cout<<endl<<"\nInserisci la chiave per l'algoritmo crittografico. (Premi 1 per random o 2 per input manuale): ";
  26.         cin>>input;
  27.  
  28.         if(input==1){
  29.  
  30.            x1 = (rand()%100+20);
  31.            x2 = (rand()%100+20);
  32.            x3 = (rand()%100+20);
  33.            x4 = (rand()%100+20);
  34.            x5 = (rand()%100+20);
  35.            x6 = (rand()%100+20);
  36.            x7 = (rand()%100+20);
  37.            x8 = (rand()%100+20);
  38.            x9 = (rand()%100+20);
  39.  
  40.     }
  41.  
  42.         else if(input==2){
  43.         cout<<endl<<"Primo numero: ";
  44.         cin>>x1;
  45.  
  46.         cout<<endl<<"Secondo numero: ";
  47.         cin>>x2;
  48.  
  49.         cout<<endl<<"Terzo numero: ";
  50.         cin>>x3;
  51.  
  52.         cout<<endl<<"Quarto numero: ";
  53.         cin>>x4;
  54.  
  55.         cout<<endl<<"Quinto numero: ";
  56.         cin>>x5;
  57.  
  58.         cout<<endl<<"Sesto numero: ";
  59.         cin>>x6;
  60.  
  61.         cout<<endl<<"Settimo numero: ";
  62.         cin>>x7;
  63.  
  64.         cout<<endl<<"Ottavo numero: ";
  65.         cin>>x8;
  66.  
  67.         cout<<endl<<"Nono numero: ";
  68.         cin>>x9;
  69.     }
  70.  
  71.         int rotore1[3] = {x1,x2,x3};
  72.         int rotore2[3] = {x4,x5,x6};         // IPOTIZZIAMO VETTORI DI DIMENSIONE 3 PER ENIGMA
  73.         int rotore3[3] = {x7,x8,x9};
  74.  
  75.         cout<<"\nrotore 1: "<<x1<<" "<<x2<<" "<<x3;    // RIASSUNTO DELLA CHIAVE
  76.         cout<<"\nrotore 2: "<<x4<<" "<<x5<<" "<<x6;
  77.         cout<<"\nrotore 3: "<<x7<<" "<<x8<<" "<<x9;
  78.  
  79.         //SELETTORE OPZIONE
  80.  
  81. do{
  82.         int i=0,z=0; //RESET DEL CONTATORE PER NON DOVER RIAVVIARE IL PROGRAMMA
  83.         cout<<endl<<"-----------------------------------\n";
  84.         cout<<endl<<"[1] * Decripta"
  85.             <<endl<<"[2] * Cripta"
  86.             <<endl<<"[3] * Esci\n"<<endl;
  87.             cout<<"Al tuo comando: ";
  88.             cin>>opzione;   //ACQUISISCO IL COMANDO SCELTO E PASSO ALLO SWITCH
  89.             cout<<endl<<"-----------------------------------\n";
  90.  
  91.         // SELETTORE DEL CASO DA OPZIONE SCELTA SOPRA
  92.  
  93.         switch (opzione)
  94.                {
  95.                 case 1:
  96.                     {while(z!=1){  // IMPOSTO IL CICLO WHILE PER NON DOVER RIPETERE IL MENU'
  97.                     cout<<"\nInserisci una lettera (ALT+987 per tornare al menu' principale): "; //LETTERA DA DECRIPTARE Û (U maiuscola con accento circonflesso)
  98.                     cin>>lettera;
  99.  
  100.                     if (lettera==(-37)){ // ESCO DAL CICLO WHILE PER INCREMENTO DELLA VARIABILE AD 1 E TORNO AL MENU'
  101.                         z++;
  102.                         break;    //TERMINO IL CICLO WHILE QUANDO Z VA AD 1 E PASSO AL CASE GIUNGENDO AL BREAK DI FONDO
  103.                         }
  104.                     else
  105.                     cout<<"\nIl carattere che hai inserito e' : \""<<int(lettera)<<"\" in ASCII"<<endl;  //CORRISPONDENZA IN ASCII
  106.  
  107.                 //   FUNZIONAMENTO MATEMATICO CONGRUO ALLA TABELLA ASCII ESTESA  //
  108.  
  109.                 x=lettera-rotore1[i];           // ROTORI CHE PARTONO CON i=0 E SI RESETTANO TORNANDO AL MENU'
  110.                         if (x < 32)
  111.                             x = 126-(32-x);
  112.  
  113.                         else if (x > 126)
  114.                             x = (x-126)+32;
  115.                         x=x-rotore2[i];
  116.  
  117.                         if (x < 32)
  118.                             x = 126-(32-x);
  119.  
  120.                         else if (x > 126)
  121.                         x = (x-126)+32;
  122.                         x=x-rotore3[i];
  123.  
  124.                         if (x < 32)
  125.                             x = 126-(32-x);
  126.  
  127.                         else if(x > 126)
  128.                             x = (x-126)+32;
  129.                             cout<<"\nEnigma ha generato il numero: "<<x<<endl;  //GENERAZIONE MATEMATICA DELL'ALGORITMO
  130.  
  131.                             cout<<"\nIl carattere che hai inserito adesso e' : \""<<char(x)<<"\" in ASCII"<<endl; //LETTERA DECRIPTATA
  132.                             i++; //INCREMENTO DELLA VARIABILE "i" CHE CONTA I TRE ROTORI
  133.                             cout<<endl<<"-----------------------------------\n";
  134.                     }
  135.                         break;  //QUANDO TERMINA IL CICLO WHILE PER LA VARIABILE Z AD 1, ALLORA SI ATTIVA IL BREAK E TORNO AL MENU'
  136.                 }
  137.  
  138.  
  139.                 case 2:
  140.                     {while(z!=1){  // IMPOSTO IL CICLO WHILE PER NON DOVER RIPETERE IL MENU'
  141.                     cout<<"\nInserisci una lettera (ALT+987 per tornare al menu' principale): "; //LETTERA DA DECRIPTARE
  142.                     cin>>lettera;
  143.  
  144.                     if (lettera==(-37)){   // ESCO DAL CICLO WHILE PER INCREMENTO DELLA VARIABILE AD 1 E TORNO AL MENU'
  145.                         z++;
  146.                         break;     //TERMINO IL CICLO WHILE QUANDO Z VA AD 1 E PASSO AL CASE GIUNGENDO AL BREAK DI FONDO
  147.                         }
  148.                     else
  149.                     cout<<"\nIl carattere che hai inserito e' : \""<<int(lettera)<<"\" in ASCII"<<endl;  //CORRISPONDENZA IN ASCII
  150.  
  151.                 //  FUNZIONAMENTO MATEMATICO CONGRUO ALLA TABELLA ASCII ESTESA   //
  152.  
  153.                 x=lettera+rotore1[i];    // ROTORI CHE PARTONO CON i=0 E SI RESETTANO TORNANDO AL MENU'
  154.                         if (x < 32)
  155.                             x = 126-(32-x);
  156.  
  157.                         else if (x > 126)
  158.                             x = (x-126)+32;
  159.                         x=x+rotore2[i];
  160.  
  161.                         if (x < 32)
  162.                             x = 126-(32-x);
  163.  
  164.                         else if (x > 126)
  165.                             x = (x-126)+32;
  166.                             x=x+rotore3[i];
  167.  
  168.                         if (x < 32)
  169.                             x = 126-(32-x);
  170.  
  171.                         else if(x > 126)
  172.                             x = (x-126)+32;
  173.                             cout<<"\nEnigma ha generato il numero: "<<x<<endl; //GENERAZIONE MATEMATICA DELL'ALGORITMO
  174.  
  175.                             cout<<"\nIl carattere che hai inserito adesso e' : \""<<char(x)<<"\" in ASCII"<<endl; //NUOVA LETTERA CRIPTATA
  176.                         i++; //INCREMENTO DELLA VARIABILE "i" CHE CONTA I TRE ROTORI
  177.                         cout<<endl<<"-----------------------------------\n";
  178.                     }
  179.                         break; //QUANDO TERMINA IL CICLO WHILE PER LA VARIABILE Z AD 1, ALLORA SI ATTIVA IL BREAK E TORNO AL MENU'
  180.                 }
  181.  
  182.         }
  183.  
  184. }
  185.  
  186. while (opzione !=3);         //TERMINAZIONE DEL PROGRAMMA
  187.     return 0;
  188. }


Per questione di ordine e di spazio, consiglio vivamente di scaricare il file Enigma.cpp in modo da visualizzarlo in modo corretto!

Detto ciò, eventuali domande sul contest possono essere fatte in privato (sotto questo topic andranno solo i vostri codici).

Non mi resta altro da dire, in bocca al lupo e che vinca il migliore!
Se la guida è stata di tuo gradimento, aiutaci a migliorare con un click premendo sull'immagine sottostante e votandoci! :D
Immagine


Avatar utente
Daniele Antonucci
Moderatore in prova
Moderatore in prova
Messaggi: 4
Contatta:

Re: Contest Programmazione Estate Tebigeek 2016!

Messaggio#2 » 05/08/2016, 22:27

Ciao Giuseppe! Ho preso come esempio il tuo codice di enigma per partecipare al contest e ho creato un semplissimo generatore di password numeriche. I comandi sono simili a quelli del tuo enigma!

  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <cstdlib>   // PER RAND()
  4. #include <ctime>     // PER TIME(NULL)
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.         srand((unsigned)time(NULL));
  10.         int input,opzione,lunghezza,i,temp,password,password1;
  11.  
  12.  
  13.         //PRESENTAZIONE PROGRAMMA
  14.         cout<<endl<<"------------------------------------";
  15.         cout<<endl<<"| GENERATORE DI PASSWORD NUMERICHE |";
  16.         cout<<endl<<"------------------------------------\n";
  17.         cout<<"\n Genera una password!"<<endl;
  18.  
  19.         cout<<endl<<"\n (Premi 1 per password random o 2 per input manuale): ";
  20.         cin>>input;
  21.  
  22.         if(input==1){
  23.                 password= (rand()%1000000);
  24.                 cout<<"La password generata e': "<<password<<endl;
  25.      }
  26.         else if(input==2){
  27.             cout<<endl<<"Inserisci una password numerica:  ";
  28.             cin>>password;
  29.             cout<<endl<<"Reinserisci la password: ";
  30.             cin>>password1;
  31.             if(password == password1){
  32.                 cout<<endl<<"La password inserita e': "<<password<<endl;
  33.             }
  34.             else if(password =! password1){
  35.                 cout<<"Le password non corrispondono, riprova"<<endl;
  36.             }
  37.  
  38.         }
  39.  
  40.         int z=0;
  41.         i=0; //RESET DEL CONTATORE PER NON DOVER RIAVVIARE IL PROGRAMMA
  42.         cout<<endl<<"-----------------------------------\n";
  43.         cout<<endl<<"[1] * Cambia password"
  44.             <<endl<<"[2] * Rimuovi password"
  45.             <<endl<<"[3] * Esci\n"<<endl;
  46.             cout<<"Al tuo comando: ";
  47.             cin>>opzione;   //ACQUISISCO IL COMANDO SCELTO E PASSO ALLO SWITCH
  48.             cout<<endl<<"-----------------------------------\n";
  49.         // SELETTORE DEL CASO DA OPZIONE SCELTA SOPRA
  50.  
  51.        switch (opzione)
  52.                {
  53.                 case 1:
  54.                     int pass_temp;
  55.                     cout<<endl<<"Conferma la password attuale: ";
  56.                     cin>>pass_temp;
  57.                     if(pass_temp == password){
  58.                         cout<<endl<<"Inserisci una nuova password: ";
  59.                         cin>>password;
  60.                         cout<<"La nuova password e': "<<password;
  61.                     }
  62.                     else{
  63.                             cout<<"Password non coincide con quella attuale,riprovare"<<endl;
  64.                             break;
  65.                     }
  66.  
  67.                 case 2:
  68.                     string conferma;
  69.                     cout<<endl<<"Sei sicuro di rimuovere la password? (si o no)  ";
  70.                     cin>>conferma;
  71.                     if(conferma == "si"){
  72.                         password = 0;
  73.                         cout<<endl<<"Password azzerata";
  74.                     }
  75.                     else if(conferma == "no"){
  76.                         cout<<endl<<"La password e' rimasta ancora:  "<<password;
  77.                     }
  78.  
  79.                }
  80. }

Torna a “Tebigeek Contest”

cron