Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. //#include "pch.h"
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstdlib>
  5. #include <time.h>
  6. #include <fstream>
  7. #include <string>
  8. #include <sstream>
  9.  
  10. using namespace std;
  11.  
  12. /*
  13. Klucze:
  14. publiczny:07;8f (e;n)
  15. prywatny:67;8f  (d;n)
  16. jak widać parametry są rozdzielone średnikiem.
  17. Tekst jawny:2356789ABCE
  18. Szyfrogram: )t\L78IABYl */
  19. int pot_mod(int a, int w, int n)
  20. {
  21.     int pot, wyn, q;
  22.  
  23.     // wykładnik w rozbieramy na sumę potęg 2
  24.     // przy pomocy algorytmu Hornera. Dla reszt
  25.     // niezerowych tworzymy iloczyn potęg a modulo n.
  26.  
  27.     pot = a; wyn = 1;
  28.     for (q = w; q > 0; q /= 2)
  29.     {
  30.         if (q % 2) wyn = (wyn * pot) % n;
  31.         pot = (pot * pot) % n; // kolejna potęga
  32.     }
  33.     return wyn;
  34. }
  35.  
  36. int main()
  37. {
  38.     stringstream ss, sss;
  39.     fstream jawny, jawny2, plik, plik2;
  40.     string zmienna_jawny, zmienna_jawny2, zmienna_plik, zmienna_plik2;
  41.     fstream zapis, zapis2;
  42.     int zmienna, ic, ic2, l1, l2, l3, l4, i, lewo, prawo, ii, lewo2, prawo2;
  43.     size_t pozycja, pozycja2;
  44.  
  45.     //Pobieranie klucza publicznego z pliku i przypisywanie go do zmiennych l1 i l2 (e;n)
  46.     plik.open("publiczny.txt", ios::in);
  47.     getline(plik, zmienna_plik);
  48.     plik.close();
  49.     pozycja = zmienna_plik.find('i');
  50.     for (i = 0; i <= zmienna_plik.length() - 1; i++)
  51.     {
  52.         if (zmienna_plik[i] == ';')
  53.         {
  54.  
  55.             pozycja = i;
  56.  
  57.             for (int x = pozycja - 1; x >= 0; x--)
  58.             {
  59.                 if (x == 0)
  60.                 {
  61.                     lewo = x;
  62.                 }
  63.             }
  64.             for (int z = pozycja + 1; z <= zmienna_plik.length() - 1; z++) {
  65.                 if (z == zmienna_plik.length() - 1)
  66.                 {
  67.                     prawo = z;
  68.                 }
  69.             }
  70.  
  71.         }
  72.     }
  73.     ss << hex << (zmienna_plik.substr(lewo, pozycja - lewo));
  74.     ss >> l1;
  75.     ss.clear();
  76.     ss << hex << (zmienna_plik.substr(pozycja + 1, prawo - pozycja));
  77.     ss >> l2;
  78.     ss.clear();
  79.  
  80.     //Pobieranie klucza prywatnego z pliku i przypisywanie go do zmiennych l3 i l4 (d;n)
  81.     plik2.open("prywatny.txt", ios::in);
  82.     getline(plik2, zmienna_plik2);
  83.     plik2.close();
  84.     pozycja2 = zmienna_plik2.find('ii');
  85.     for (ii = 0; ii <= zmienna_plik2.length() - 1; ii++)
  86.     {
  87.         if (zmienna_plik2[ii] == ';')
  88.         {
  89.  
  90.             pozycja2 = ii;
  91.  
  92.             for (int x2 = pozycja - 1; x2 >= 0; x2--)
  93.             {
  94.                 if (x2 == 0)
  95.                 {
  96.                     lewo2 = x2;
  97.                 }
  98.             }
  99.             for (int z2 = pozycja2 + 1; z2 <= zmienna_plik2.length() - 1; z2++) {
  100.                 if (z2 == zmienna_plik2.length() - 1)
  101.                 {
  102.                     prawo2 = z2;
  103.                 }
  104.             }
  105.  
  106.         }
  107.     }
  108.     sss << hex << (zmienna_plik2.substr(lewo2, pozycja2 - lewo2));
  109.     sss >> l3;
  110.     sss.clear();
  111.     sss << hex << (zmienna_plik2.substr(pozycja2 + 1, prawo2 - pozycja2));
  112.     sss >> l4;
  113.     sss.clear();
  114.     cout << "-------------------" << endl;
  115.     cout << "Szyfrowanie polega na pobraniu kluczy, a nastepnie pobraniu " << endl <<
  116.         "pjawny.txt i zapisanie wyniku w wynik.txt. Na odwrot z deszyfrowaniem" << endl <<
  117.         "najpierw pobiera z wynik.txt, a potem zapisuje do pjawny.txt." << endl;
  118.     cout << "---------------------" << endl;
  119.     cout << "Co chcesz zrobic?" << endl;
  120.     cout << "[1] Szyfrowanie" << endl;
  121.     cout << "[2] Deszyfrowanie" << endl;
  122.     cout << "[3] Kawal" << endl;
  123.  
  124.     cin >> zmienna;
  125.     switch (zmienna) {
  126.     case 1:
  127.         jawny.open("pjawny.txt", ios::in);
  128.         getline(jawny, zmienna_jawny);
  129.         jawny.close();
  130.         zapis.open("wynik.txt", ios::out);
  131.         for (ic = 0; ic < zmienna_jawny.length(); ic++)
  132.         {
  133.             char x = zmienna_jawny.at(ic);
  134.             pot_mod(int(x), l1, l2);
  135.             cout << (char)pot_mod(int(x), l1, l2);
  136.             zapis << (char)pot_mod(int(x), l1, l2);
  137.         }
  138.         zapis.close();
  139.         break;
  140.     case 2:
  141.         jawny2.open("wynik.txt", ios::in);
  142.         getline(jawny2, zmienna_jawny2);
  143.         jawny2.close();
  144.         zapis2.open("pjawny.txt", ios::out);
  145.         for (ic2 = 0; ic2 < zmienna_jawny2.length(); ic2++)
  146.         {
  147.             char x = zmienna_jawny2.at(ic2);
  148.             pot_mod(int(x), l3, l4);
  149.             cout << (char)pot_mod(int(x), l3, l4);
  150.             zapis2 << (char)pot_mod(int(x), l3, l4);
  151.         }
  152.         zapis.close();
  153.         break;
  154.     case 3:
  155.  
  156.         cout << "Wrona i golab leca nad zamarznietym jeziorem. Wrona do golebia :" << endl;
  157.         cout << endl;
  158.         cout << endl;
  159.         cout << "-Kra!" << endl;
  160.         break;
  161.     default:
  162.         cout << endl;
  163.         cout << endl;
  164.         cout << "O ty uzyszkodniku!";
  165.         cout << endl;
  166.         cout << endl;
  167.     }
  168.     return 0;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement