Advertisement
Guest User

XOR

a guest
Apr 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4. #include <conio.h>
  5. using namespace std;
  6.  
  7. string alphabet = "абвгдежзийклмнопрстуфхцчшщъыьэюя";
  8.  
  9. int main()
  10. {
  11.     SetConsoleOutputCP(1251);
  12.     SetConsoleCP(1251);
  13.     setlocale(LC_ALL, "");
  14.  
  15.     string key, message, fullShifr;
  16.     cout << "Введите сообщение:" << endl;
  17.     getline(cin, message);
  18.     cout << "Введите ключ:" << endl;
  19.     cin >> key;
  20.     bool temp, task = 1;
  21.     cout << "Для шифровки нажмите 1, Для дешифровки 0:" << endl;
  22.     cin >> temp; temp = !temp;
  23.  
  24.     //Первое условие. Если длина вводимого слова больше, либо равна длине ключа
  25.     if (message.size() >= key.size())
  26.     {
  27.         for (int i = 0; i < (message.size() / key.size()); i++)
  28.             fullShifr = fullShifr + key; //Записываем целое количество ключа. Растягивая ключ по длине слова.
  29.         for (int j = 0; j < (message.size() % key.size()); j++)
  30.             fullShifr = fullShifr + key[j];
  31.     }
  32.     else  //Иначе если ключ длиннее слова, укорачиваем ключ до длины слова.
  33.         for (int i = 0; i < message.size(); i++)
  34.             fullShifr = fullShifr + fullShifr[i%key.length()];
  35.  
  36.     string newMessage = "";
  37.     while (task == 1)
  38.     {
  39.         temp = !temp;
  40.         if (newMessage != "")
  41.             message = newMessage;
  42.         newMessage = "";
  43.         for (int i = 0; i < message.length(); i++)
  44.         {
  45.             int a = alphabet.find(message[i]) + 1;
  46.             int b = alphabet.find(fullShifr[i]) + 1;
  47.             int c = a ^ b;
  48.             newMessage += alphabet[(c - 1) % 32];
  49.         }
  50.         temp ? cout << "Зашифрованное слово: " << newMessage << endl : cout << "Расшифрованное слово: " << newMessage << endl;
  51.         cout << endl << "Сделать обратную операцию? нет = 0, да = 1:";
  52.         cin >> task;
  53.     }
  54.     system("pause");
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement