# Untitled

Oct 22nd, 2021
682
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <iostream>
2. #include <vector>
3. #include <fstream>
4.
5. using namespace std;
6.
7. int main() {
8.     int e;
9.     int n;
10.     cin >> e;
11.     cin >> n;
12.
13.     //array of the 25 primes between 1 and 100
14.     int primes[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
15.
16.     //Find P & Q
17.     int p = 0;
18.     int q = 0;
19.     for (int i = 0; i < 25; i++) {
20.         if (n % primes[i] == 0) {
21.             if (p == 0) {
22.                 p = primes[i];
23.             }
24.             else {
25.                 q = primes[i];
26.             }
27.         }
28.     }
29.
30.     //if input was invalid, the program will quit.
31.     if (p == 0 || q == 0) {
32.         cout << "Public key not valid!";
33.         exit(0);
34.     }
35.
36.     //Insert file with encoded message
37.     string fileName;
38.     cin >> fileName;
39.     ifstream encryptedFile (fileName);
40.     int encryptedInput;
41.     vector<int> encryptedNums;
42.     while (encryptedFile >> encryptedInput) {
43.         encryptedNums.push_back(encryptedInput);
44.     }
45.
46.     //finds phi(n) totient value
47.     int totient;
48.     totient = (p - 1) * (q - 1);
49.
50.     //finds d = (inverse of e) mod phi(n)
51.     int d = 0;
52.     for (int i = 0; i < totient; i++) {
53.         if (((e % totient) * (i % totient)) % totient == 1) {
54.             d = i;
55.         }
56.     }
57.     //outputting all found values
58.     cout << p << " " << q << " " << totient << " " << d << "\n";
59.
60.     //decryption step
61.     vector<int> decryptedNums;
62.     for (int i = 0; i < 13; i++) {
63.         int tempd = d;
64.         //breaking down (C^d mod n) and computing since C^d is too large
65.         int modTemp = 1;
66.         while (tempd >= 3) {
67.             modTemp *= ((encryptedNums[i] * encryptedNums[i]) % n);
68.             tempd -= 2;
69.             modTemp %= n;
70.         }
71.
72.         if (tempd == 2) {
73.             modTemp *= (encryptedNums[i] * encryptedNums[i]);
74.             modTemp = modTemp % n;
75.         }
76.         else if (tempd == 1) {
77.
78.             modTemp *= encryptedNums[i];
79.             modTemp = modTemp % n;
80.             cout << modTemp << " ";
81.         }
82.         else {
83.             modTemp = modTemp % n;
84.             cout << modTemp << " ";
85.         }
86.         decryptedNums.push_back(modTemp);
87.     }
88.     //convert decryped ints to chars
89.     string decryptedEnglish;
90.     for (int i = 0; i < 13; i++) {
91.         if (decryptedNums[i] == 3) {
92.             decryptedEnglish += "A";
93.         }
94.         else if (decryptedNums[i] == 4) {
95.             decryptedEnglish += "B";
96.         }
97.         else if (decryptedNums[i] == 5) {
98.             decryptedEnglish += "C";
99.         }
100.         else if (decryptedNums[i] == 6) {
101.             decryptedEnglish += "D";
102.         }
103.         else if (decryptedNums[i] == 7) {
104.             decryptedEnglish += "E";
105.         }
106.         else if (decryptedNums[i] == 8) {
107.             decryptedEnglish += "F";
108.         }
109.         else if (decryptedNums[i] == 9) {
110.             decryptedEnglish += "G";
111.         }
112.         else if (decryptedNums[i] == 10) {
113.             decryptedEnglish += "H";
114.         }
115.         else if (decryptedNums[i] == 11) {
116.             decryptedEnglish += "I";
117.         }
118.         else if (decryptedNums[i] == 12) {
119.             decryptedEnglish += "J";
120.         }
121.         else if (decryptedNums[i] == 13) {
122.             decryptedEnglish += "K";
123.         }
124.         else if (decryptedNums[i] == 14) {
125.             decryptedEnglish += "L";
126.         }
127.         else if (decryptedNums[i] == 15) {
128.             decryptedEnglish += "M";
129.         }
130.         else if (decryptedNums[i] == 16) {
131.             decryptedEnglish += "N";
132.         }
133.         else if (decryptedNums[i] == 17) {
134.             decryptedEnglish += "O";
135.         }
136.         else if (decryptedNums[i] == 18) {
137.             decryptedEnglish += "P";
138.         }
139.         else if (decryptedNums[i] == 19) {
140.             decryptedEnglish += "Q";
141.         }
142.         else if (decryptedNums[i] == 20) {
143.             decryptedEnglish += "R";
144.         }
145.         else if (decryptedNums[i] == 21) {
146.             decryptedEnglish += "S";
147.         }
148.         else if (decryptedNums[i] == 22) {
149.             decryptedEnglish += "T";
150.         }
151.         else if (decryptedNums[i] == 23) {
152.             decryptedEnglish += "U";
153.         }
154.         else if (decryptedNums[i] == 24) {
155.             decryptedEnglish += "V";
156.         }
157.         else if (decryptedNums[i] == 25) {
158.             decryptedEnglish += "W";
159.         }
160.         else if (decryptedNums[i] == 26) {
161.             decryptedEnglish += "X";
162.         }
163.         else if (decryptedNums[i] == 27) {
164.             decryptedEnglish += "Y";
165.         }
166.         else if (decryptedNums[i] == 28) {
167.             decryptedEnglish += "Z";
168.         }
169.         else if (decryptedNums[i] == 29) {
170.             decryptedEnglish += " ";
171.         }
172.         else if (decryptedNums[i] == 30) {
173.             decryptedEnglish += "\"";
174.         }
175.         else if (decryptedNums[i] == 31) {
176.             decryptedEnglish += ".";
177.         }
178.         else if (decryptedNums[i] == 32) {
179.             decryptedEnglish += ",";
180.         }
181.         else if (decryptedNums[i] == 33) {
182.             decryptedEnglish += "'";
183.         }
184.     }
185.     cout << "\n" << decryptedEnglish;
186. }
RAW Paste Data