Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <windows.h>
- #include <conio.h>
- using namespace std;
- string alphabet = "абвгдежзийклмнопрстуфхцчшщъыьэюя";
- int main()
- {
- SetConsoleOutputCP(1251);
- SetConsoleCP(1251);
- setlocale(LC_ALL, "");
- string key, message, fullShifr;
- cout << "Введите сообщение:" << endl;
- getline(cin, message);
- cout << "Введите ключ:" << endl;
- cin >> key;
- bool temp, task = 1;
- cout << "Для шифровки нажмите 1, Для дешифровки 0:" << endl;
- cin >> temp; temp = !temp;
- //Первое условие. Если длина вводимого слова больше, либо равна длине ключа
- if (message.size() >= key.size())
- {
- for (int i = 0; i < (message.size() / key.size()); i++)
- fullShifr = fullShifr + key; //Записываем целое количество ключа. Растягивая ключ по длине слова.
- for (int j = 0; j < (message.size() % key.size()); j++)
- fullShifr = fullShifr + key[j];
- }
- else //Иначе если ключ длиннее слова, укорачиваем ключ до длины слова.
- for (int i = 0; i < message.size(); i++)
- fullShifr = fullShifr + fullShifr[i%key.length()];
- string newMessage = "";
- while (task == 1)
- {
- temp = !temp;
- if (newMessage != "")
- message = newMessage;
- newMessage = "";
- for (int i = 0; i < message.length(); i++)
- {
- int a = alphabet.find(message[i]) + 1;
- int b = alphabet.find(fullShifr[i]) + 1;
- int c = a ^ b;
- newMessage += alphabet[(c - 1) % 32];
- }
- temp ? cout << "Зашифрованное слово: " << newMessage << endl : cout << "Расшифрованное слово: " << newMessage << endl;
- cout << endl << "Сделать обратную операцию? нет = 0, да = 1:";
- cin >> task;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement