Advertisement
prog3r

Untitled

Jan 20th, 2024
887
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.76 KB | None | 0 0
  1. #include <cctype>
  2. #include <cerrno>
  3. #include <cfloat>
  4. #include <ciso646>
  5. #include <climits>
  6. #include <clocale>
  7. #include <cmath>
  8. #include <csetjmp>
  9. #include <csignal>
  10. #include <cstdarg>
  11. #include <cstddef>
  12. #include <cstdio>
  13. #include <cstdlib>
  14. #include <cstring>
  15. #include <ctime>
  16. #include <ccomplex>
  17. #include <cfenv>
  18. #include <cinttypes>
  19. #include <cstdbool>
  20. #include <cstdint>
  21. #include <ctgmath>
  22. #include <cwchar>
  23. #include <cwctype>
  24. #include <exception>
  25. #include <stdexcept>
  26. #include <algorithm>
  27. #include <bitset>
  28. #include <complex>
  29. #include <deque>
  30. #include <exception>
  31. #include <fstream>
  32. #include <functional>
  33. #include <iomanip>
  34. #include <ios>
  35. #include <iosfwd>
  36. #include <iostream>
  37. #include <istream>
  38. #include <iterator>
  39. #include <limits>
  40. #include <list>
  41. #include <locale>
  42. #include <map>
  43. #include <memory>
  44. #include <new>
  45. #include <numeric>
  46. #include <ostream>
  47. #include <queue>
  48. #include <set>
  49. #include <sstream>
  50. #include <stack>
  51. #include <stdexcept>
  52. #include <streambuf>
  53. #include <string>
  54. #include <typeinfo>
  55. #include <utility>
  56. #include <valarray>
  57. #include <vector>
  58. #include <array>
  59. #include <atomic>
  60. #include <chrono>
  61. #include <condition_variable>
  62. #include <forward_list>
  63. #include <future>
  64. #include <initializer_list>
  65. #include <mutex>
  66. #include <random>
  67. #include <ratio>
  68. #include <regex>
  69. #include <scoped_allocator>
  70. #include <system_error>
  71. #include <thread>
  72. #include <tuple>
  73. #include <typeindex>
  74. #include <type_traits>
  75. #include <unordered_map>
  76. #include <unordered_set>
  77. using namespace std;
  78.  
  79. using ll = long long;
  80.  
  81. void encrypt(ll e, ll secret, ll N) {
  82.     ll res = 1;
  83.     while (e--) {
  84.         res = res*secret%N;
  85.     }
  86.     cout << "Шифр: <" << res << ">\n";
  87. }
  88.  
  89. void decrypt(ll d, ll open, ll N) {
  90.     ll res = 1;
  91.     while (d--) {
  92.         res = res*open%N;
  93.     }
  94.     cout << "Ответ: <" << res << ">\n";
  95. }
  96.  
  97. void find_d(ll e, ll phi) {
  98.     cout << "e = " << e << ", φ = " << phi << "\n";
  99.     while (e != 1) {
  100.         ll ost = phi%e;
  101.         ll c = phi/e;
  102.         if (ost==1) {
  103.             cout << "Начинай с " << ost << "=" << phi << "-" << e << "*" << c << "\n";
  104.         }
  105.         else {
  106.             cout << "Заменяй " << ost << " на " << phi << "-" << e << "*" << c << "\n";
  107.         };
  108.  
  109.         phi = ost;
  110.         swap(phi, e);
  111.     }
  112. }
  113.  
  114. int main() {
  115.     ll first;
  116.     cout << "1=Расшифровать, 2=Зашифровать? >> ";
  117.     cin >> first;
  118.     ll N, e;
  119.     cout << "N, e (через пробел)? >> ";
  120.     cin >> N >> e;
  121.     if (first == 1) {
  122.         ll q, p = 1;
  123.         while (true) {
  124.             p += 1;
  125.             if (N%p==0) {
  126.                 q = N/p;
  127.                 break;
  128.             }
  129.         }
  130.         ll phi = (p-1)*(q-1);
  131.         find_d(e, phi);
  132.         ll d=0;
  133.         while (e*d%phi != 1) {
  134.             cout << "У тебя должно получиться 1=" << e << "*u+" << phi << "*v. Введи u? >> ";
  135.             cin >> d;
  136.         }
  137.         cout << "Верно! 🍻";
  138.         ll tests;
  139.         cout << "Кол-во данных? >> ";
  140.         cin >> tests;
  141.         while (tests--) {
  142.             ll open;
  143.             cout << "Введи зашифрованные данные? >> ";
  144.             cin >> open;
  145.             decrypt(d, open, N);
  146.             cout << "\n";
  147.         }
  148.     }
  149.     else if (first == 2) {
  150.         ll tests;
  151.         cout << "Кол-во данных? >> ";
  152.         cin >> tests;
  153.         while (tests--) {
  154.             ll secret;
  155.             cout << "Введи данные которые нужно зашифровать ? >> ";
  156.             cin >> secret;
  157.             encrypt(e, secret, N);
  158.             cout << "\n";
  159.         }
  160.     }
  161.     else {
  162.         cout << "Неверный ввод";
  163.     }
  164. }
Advertisement
Comments
  • prog3r
    1 year
    Comment was deleted
Add Comment
Please, Sign In to add comment
Advertisement