Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include "pch.h"
- #include <iostream>
- #include <iomanip>
- #include <cstdlib>
- #include <time.h>
- #include <fstream>
- #include <string>
- #include <sstream>
- using namespace std;
- /*
- Klucze:
- publiczny:07;8f (e;n)
- prywatny:67;8f (d;n)
- jak widać parametry są rozdzielone średnikiem.
- Tekst jawny:2356789ABCE
- Szyfrogram: )t\L78IABYl */
- int pot_mod(int a, int w, int n)
- {
- int pot, wyn, q;
- // wykładnik w rozbieramy na sumę potęg 2
- // przy pomocy algorytmu Hornera. Dla reszt
- // niezerowych tworzymy iloczyn potęg a modulo n.
- pot = a; wyn = 1;
- for (q = w; q > 0; q /= 2)
- {
- if (q % 2) wyn = (wyn * pot) % n;
- pot = (pot * pot) % n; // kolejna potęga
- }
- return wyn;
- }
- int main()
- {
- stringstream ss, sss;
- fstream jawny, jawny2, plik, plik2;
- string zmienna_jawny, zmienna_jawny2, zmienna_plik, zmienna_plik2;
- fstream zapis, zapis2;
- int zmienna, ic, ic2, l1, l2, l3, l4, i, lewo, prawo, ii, lewo2, prawo2;
- size_t pozycja, pozycja2;
- //Pobieranie klucza publicznego z pliku i przypisywanie go do zmiennych l1 i l2 (e;n)
- plik.open("publiczny.txt", ios::in);
- getline(plik, zmienna_plik);
- plik.close();
- pozycja = zmienna_plik.find('i');
- for (i = 0; i <= zmienna_plik.length() - 1; i++)
- {
- if (zmienna_plik[i] == ';')
- {
- pozycja = i;
- for (int x = pozycja - 1; x >= 0; x--)
- {
- if (x == 0)
- {
- lewo = x;
- }
- }
- for (int z = pozycja + 1; z <= zmienna_plik.length() - 1; z++) {
- if (z == zmienna_plik.length() - 1)
- {
- prawo = z;
- }
- }
- }
- }
- ss << hex << (zmienna_plik.substr(lewo, pozycja - lewo));
- ss >> l1;
- ss.clear();
- ss << hex << (zmienna_plik.substr(pozycja + 1, prawo - pozycja));
- ss >> l2;
- ss.clear();
- //Pobieranie klucza prywatnego z pliku i przypisywanie go do zmiennych l3 i l4 (d;n)
- plik2.open("prywatny.txt", ios::in);
- getline(plik2, zmienna_plik2);
- plik2.close();
- pozycja2 = zmienna_plik2.find('ii');
- for (ii = 0; ii <= zmienna_plik2.length() - 1; ii++)
- {
- if (zmienna_plik2[ii] == ';')
- {
- pozycja2 = ii;
- for (int x2 = pozycja - 1; x2 >= 0; x2--)
- {
- if (x2 == 0)
- {
- lewo2 = x2;
- }
- }
- for (int z2 = pozycja2 + 1; z2 <= zmienna_plik2.length() - 1; z2++) {
- if (z2 == zmienna_plik2.length() - 1)
- {
- prawo2 = z2;
- }
- }
- }
- }
- sss << hex << (zmienna_plik2.substr(lewo2, pozycja2 - lewo2));
- sss >> l3;
- sss.clear();
- sss << hex << (zmienna_plik2.substr(pozycja2 + 1, prawo2 - pozycja2));
- sss >> l4;
- sss.clear();
- cout << "-------------------" << endl;
- cout << "Szyfrowanie polega na pobraniu kluczy, a nastepnie pobraniu " << endl <<
- "pjawny.txt i zapisanie wyniku w wynik.txt. Na odwrot z deszyfrowaniem" << endl <<
- "najpierw pobiera z wynik.txt, a potem zapisuje do pjawny.txt." << endl;
- cout << "---------------------" << endl;
- cout << "Co chcesz zrobic?" << endl;
- cout << "[1] Szyfrowanie" << endl;
- cout << "[2] Deszyfrowanie" << endl;
- cout << "[3] Kawal" << endl;
- cin >> zmienna;
- switch (zmienna) {
- case 1:
- jawny.open("pjawny.txt", ios::in);
- getline(jawny, zmienna_jawny);
- jawny.close();
- zapis.open("wynik.txt", ios::out);
- for (ic = 0; ic < zmienna_jawny.length(); ic++)
- {
- char x = zmienna_jawny.at(ic);
- pot_mod(int(x), l1, l2);
- cout << (char)pot_mod(int(x), l1, l2);
- zapis << (char)pot_mod(int(x), l1, l2);
- }
- zapis.close();
- break;
- case 2:
- jawny2.open("wynik.txt", ios::in);
- getline(jawny2, zmienna_jawny2);
- jawny2.close();
- zapis2.open("pjawny.txt", ios::out);
- for (ic2 = 0; ic2 < zmienna_jawny2.length(); ic2++)
- {
- char x = zmienna_jawny2.at(ic2);
- pot_mod(int(x), l3, l4);
- cout << (char)pot_mod(int(x), l3, l4);
- zapis2 << (char)pot_mod(int(x), l3, l4);
- }
- zapis.close();
- break;
- case 3:
- cout << "Wrona i golab leca nad zamarznietym jeziorem. Wrona do golebia :" << endl;
- cout << endl;
- cout << endl;
- cout << "-Kra!" << endl;
- break;
- default:
- cout << endl;
- cout << endl;
- cout << "O ty uzyszkodniku!";
- cout << endl;
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement