Загрузка данных


#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;
}