#include <iostream>
#include <string>
#include <bitset>
#include <clocale>
#include <windows.h>
int main() {
setlocale(LC_ALL, "ru");
SetConsoleCP(866);
SetConsoleOutputCP(866);
// Открытый текст
std::string plaintext = "ПРИВЕТИК";
// Ключ (гамма) = 10 в десятичной = 1010 в двоичной
char key = 10;
std::cout << "Открытый текст: " << plaintext << "\n";
std::cout << "Ключ в 2-чной: 1010\n";
std::cout << "=======================================================\n";
std::string ciphertext = "";
for (size_t i = 0; i < plaintext.size(); ++i) {
unsigned char p = (unsigned char)plaintext[i];
unsigned char c = p ^ key;
ciphertext += c;
// Разбиваем на 4 бита для наглядности
std::bitset<8> pBits(p);
std::bitset<8> cBits(c);
std::string pStr = pBits.to_string();
std::string cStr = cBits.to_string();
std::cout << "Буква " << p << " (код " << (int)p << ")\n";
std::cout << "Двоичный код: " << pStr.substr(0, 4) << " " << pStr.substr(4, 4) << "\n";
std::cout << "Гамма (1010): " << " " << " 1010" << "\n";
std::cout << "-------------------------------------------------------\n";
std::cout << "Результат: " << cStr.substr(0, 4) << " " << cStr.substr(4, 4) << " -> Буква " << c << "\n\n";
}
std::cout << "=======================================================\n";
std::cout << "Зашифрованный текст: " << ciphertext << "\n";
return 0;
}