Advertisement
STANAANDREY

Viginere

May 12th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. void Setup();
  7. void e_inter(), d_inter(), up_input(string &input);
  8. void __attribute__((constructor)) Setup();
  9. string Encrypt(string mess, string key);
  10. string Decrypt(string e_mess, string key);
  11. string KeyGen(short key_len);
  12. string get_file();
  13. char option;
  14. int Exit_app();
  15. string alfa;
  16.  
  17. ///********
  18. int main()
  19. {
  20.  
  21.     cout << "1.encrypt" << endl;
  22.     cout << "2.decrypt" << endl;
  23.     cout << "3.exit" << endl;
  24.     cout << "alege(1/2/3):";
  25.     option = getch();
  26.     system("cls");
  27.     switch (option)
  28.     {
  29.         case '1':
  30.             e_inter();
  31.             break;
  32.         case '2':
  33.             d_inter();
  34.             break;
  35.         case '3':
  36.             Exit_app();
  37.             break;
  38.         default:
  39.             return main();
  40.     }
  41. }
  42.  
  43. void Setup()
  44. {
  45.     srand(time(NULL));
  46.     system("title V-ENCRYPTER");
  47.     HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
  48.     SetConsoleTextAttribute(h, 10);
  49.     for (char c = 'A'; c <= 'Z'; c++)
  50.         alfa += c;
  51. }
  52.  
  53. int Exit_app()
  54. {
  55.     cout << "Exit";
  56.     for (int i = 0; i < 4; i++)
  57.     {
  58.         Sleep(1000);
  59.         cout << '.';
  60.     }
  61.     return EXIT_SUCCESS;
  62. }
  63. ///
  64. string Encrypt(string mess, string key)
  65. {
  66.     int i, j, poz, shift;
  67.     string e_mess;
  68.     const int len = mess.size(), key_len = key.size();
  69.     for (i = 0, j = 0; i < len; i++, j++)
  70.     {
  71.         if (mess[i] == 32)
  72.         {
  73.             j--;
  74.             e_mess += 32;
  75.             continue;
  76.         }
  77.  
  78.         poz = (int)mess[i] - 65;
  79.         shift = (int)key[j % key_len] - 65;
  80.         e_mess += alfa[(shift + poz) % 26];
  81.     }
  82.     return e_mess;
  83. }
  84.  
  85. string Decrypt(string e_mess, string key)
  86. {
  87.     string text;
  88.     const int len = e_mess.size(), key_len = key.size();
  89.     int i, j, poz, shift;
  90.     for (i = 0, j = 0; i < len; i++, j++)
  91.     {
  92.         if (e_mess[i] == 32)
  93.         {
  94.             j--;
  95.             text += 32;
  96.             continue;
  97.         }
  98.         poz = (int)e_mess[i] - 65;
  99.         shift = (int)key[j % key_len] - 65;
  100.         text += alfa[(poz - shift + 26) % 26];
  101.     }
  102.     return text;
  103. }
  104.  
  105. string get_file()
  106. {
  107.     system("cls");
  108.     string text = "";
  109.     cout << "Asigurate ca fisieru e in folder cu aplicatia!" << endl;
  110.     string file_name; ///***********
  111.     cout << "Numele fisierului e:";
  112.     cin.ignore();
  113.     getline(cin, file_name);
  114.     fstream fin;
  115.     fin.close();
  116.     fin.open("FILE.in", ios::in);
  117.     if (!fin.is_open())
  118.     {
  119.         const time_t mili_t = 3000;
  120.         cout << "Eroare!!!";
  121.         Beep((mili_t / 6), mili_t);
  122.         Sleep(mili_t / 3);
  123.         return get_file();
  124.     }
  125.     else
  126.     {
  127.         string line;
  128.         while (getline(fin, line))
  129.             text.append(line);
  130.     }
  131.     fin.close();
  132.     return text;
  133. }
  134.  
  135. void up_input(string& input)
  136. {
  137.     unsigned i;
  138.     for (i = 0; i < input.size(); i++)
  139.         input[i] = toupper(input[i]);
  140. }
  141.  
  142. string KeyGen(short key_len)
  143. {
  144.     string key;
  145.     if (!key_len)
  146.         key_len = rand() % 10;
  147.     for (short i = 0; i < key_len; i++)
  148.         key += alfa[rand() % alfa.size()];
  149.     return key;
  150. }
  151.  
  152. void e_inter()
  153. {
  154.     bool ok;
  155.     system("cls");
  156.     char key_type;
  157.     short key_len;
  158.     string key, text;
  159.     cout << "1.Encrypt:" << endl;
  160.     cout << "2.Encrypt file:" << endl;
  161.     do
  162.     {
  163.         option = getch();
  164.     } while (key_type < '1' && key_type > '2');
  165.     system("cls");
  166.     cout << "(cheia e cuvant)" << endl;
  167.     cout << "1.Introdu cheia!" << endl;
  168.     cout << "2.Genereaza cheie random!\n";
  169.     do
  170.     {
  171.         key_type = getch();
  172.     } while (key_type < '1' && key_type > '2');
  173.     system("cls");
  174.     if (key_type == '2')
  175.     {
  176.         cout << "Lungimea cheii(apasa 0 daca vrei sa fie random):";
  177.         do
  178.         {
  179.             cin >> key_len;
  180.         } while (key_len < 0);
  181.         do
  182.         {
  183.             key = KeyGen(key_len);
  184.             cout << "Cheia generata e \"" << key << "\" esti de acord?(0-nu 1-da):";
  185.             cin >> ok;
  186.         } while (!ok);
  187.     }
  188.     else
  189.     {
  190.         cout << "Cheie:";
  191.         cin >> key;
  192.     }
  193.     cout << endl;
  194.     if (option == '1')
  195.     {
  196.         cout << "Text:\n";
  197.         cin.ignore();
  198.         getline(cin, text);
  199.     }
  200.     else
  201.     {
  202.         text = get_file();
  203.     }
  204.     up_input(text);
  205.     up_input(key);
  206.     cout << "\nTextul criptat e:" << endl;
  207.     cout << Encrypt(text, key) << endl << endl;
  208. back_interface:
  209. {
  210.     char opt;
  211.     cout << "1.menu" << endl;
  212.     cout << "2.inapoi" << endl;
  213.     cout << "3.exit" << endl;
  214.     cout << "alege:";
  215.     opt = getch();
  216.     system("cls");
  217.     switch (opt)
  218.     {
  219.         case '1':
  220.             main();
  221.             break;
  222.         case '2':
  223.             e_inter();
  224.             break;
  225.         case '3':
  226.             Exit_app();
  227.             break;
  228.         default:
  229.             goto back_interface;
  230.     }
  231. }
  232. }
  233. void d_inter()
  234. {
  235.     string key, e_text;
  236.     cout << "1.decrypt" << endl;
  237.     cout << "2.decrypt file" << endl;
  238.     do
  239.     {
  240.         option = getch();
  241.     } while (option < '1' && option > '2');
  242.     system("cls");
  243.     cout << "cheie:";
  244.     cin >> key;
  245.     cin.ignore();
  246.     if (option == '1')
  247.     {
  248.         cout << "Text encriptat:";
  249.         getline(cin, e_text);
  250.     }
  251.     else
  252.     {
  253.         e_text = get_file();
  254.     }
  255.     up_input(key);
  256.     up_input(e_text);
  257.     cout << "Text decriptat:" << endl;
  258.     cout << Decrypt(e_text, key) << endl;
  259. back_interface:
  260. {
  261.     char opt;
  262.     cout << "1.menu" << endl;
  263.     cout << "2.inapoi" << endl;
  264.     cout << "3.exit" << endl;
  265.     cout << "alege:";
  266.     opt = getch();
  267.     system("cls");
  268.     switch (opt)
  269.     {
  270.         case '1':
  271.             main();
  272.             break;
  273.         case '2':
  274.             e_inter();
  275.             break;
  276.         case '3':
  277.             Exit_app();
  278.             break;
  279.         default:
  280.             goto back_interface;
  281.     }
  282. }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement