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


// ========== ШИФРОВАНИЕ ==========
int CIPHER() {
    system("cls");
    info();

    cout << "************************************\n";
    cout << "*    ШИФРОВАНИЕ/ДЕШИФРОВАНИЕ      *\n";
    cout << "************************************\n";
    cout << "* 1. Цезарь (сдвиг букв)           *\n";
    cout << "* 2. Побитовый сдвиг               *\n";
    cout << "* 3. Динамический (XOR с ключом)   *\n";
    cout << "************************************\n";
    cout << "Выберите пункт: ";

    char choice = _getch();
    cout << choice << endl;

    cin.ignore();
    unsigned char txt[256] = {0};
    int len;

    if (choice == '1') {
        cout << "Введите текст: ";
        string input;
        if (!ReadStringWithESC(input)) return 0;
        len = (int)input.length();
        strcpy_s((char*)txt, 256, input.c_str());

        int shift = 3;
        cout << "Выберите: 1 - зашифровать, 2 - расшифровать: ";
        char op = _getch(); cout << op << endl;
        if (op == '1') {
            for (int i = 0; i < len; i++)
                if (isalpha(txt[i])) {
                    char base = isupper(txt[i]) ? 'A' : 'a';
                    txt[i] = base + (txt[i] - base + shift) % 26;
                }
            cout << "Зашифрованный текст: " << txt << endl;
        } else if (op == '2') {
            for (int i = 0; i < len; i++)
                if (isalpha(txt[i])) {
                    char base = isupper(txt[i]) ? 'A' : 'a';
                    txt[i] = base + (txt[i] - base - shift + 26) % 26;
                }
            cout << "Расшифрованный текст: " << txt << endl;
        } else cout << "Неверный выбор!" << endl;
    }
    else if (choice == '2') {
        cout << "Введите текст: ";
        string input;
        if (!ReadStringWithESC(input)) return 0;
        len = (int)input.length();
        strcpy_s((char*)txt, 256, input.c_str());

        cout << "Выберите: 1 - зашифровать, 2 - расшифровать: ";
        char op = _getch(); cout << op << endl;
        if (op == '1') {
            if (len == 0) { cout << "Пустая строка!" << endl; _getch(); return 0; }
            unsigned char first = (txt[0] & 0x80) >> 7;
            for (int i = 0; i < len; i++) {
                unsigned char next = (i < len-1) ? (txt[i+1] & 0x80) >> 7 : first;
                txt[i] = (txt[i] << 1) | next;
            }
            cout << "Зашифрованный текст: " << txt << endl;
        } else if (op == '2') {
            if (len == 0) { cout << "Пустая строка!" << endl; _getch(); return 0; }
            unsigned char lastBit = (txt[len-1] & 1);
            for (int i = len-1; i >= 0; i--) {
                unsigned char prevBit = (i > 0) ? (txt[i-1] & 1) : lastBit;
                txt[i] = (txt[i] >> 1) | (prevBit << 7);
            }
            cout << "Расшифрованный текст: " << txt << endl;
        } else cout << "Неверный выбор!" << endl;
    }
    else if (choice == '3') {
        cout << "Введите текст: ";
        string input;
        if (!ReadStringWithESC(input)) return 0;
        len = (int)input.length();
        strcpy_s((char*)txt, 256, input.c_str());

        unsigned char key;
        cout << "Введите ключ (0-255): ";
        int k;
        if (!ReadIntWithESC(k)) return 0;
        key = (unsigned char)k;

        cout << "Выберите: 1 - зашифровать, 2 - расшифровать: ";
        char op = _getch(); cout << op << endl;
        for (int i = 0; i < len; i++) txt[i] ^= key;
        cout << "Результат: " << txt << endl;
    }
    else {
        cout << "Неверный пункт меню!" << endl;
    }
    _getch();
    return 0;
}

// ========== ГЛАВНАЯ ФУНКЦИЯ ==========
int main() {
    SetConsoleTitle(L"Лабораторная работа");
    setlocale(LC_ALL, "rus");
    unsigned char ch = 0;

    do {
        system("cls");
        info();
        cout << "===========================================================\n";
        cout << "                       МЕНЮ ПРОГРАММЫ                      \n";
        cout << "===========================================================\n";
        cout << " 1 - Лабораторная работа 1 (Статический массив)\n";
        cout << " 2 - Лабораторная работа 2 (Динамический массив)\n";
        cout << " 3 - Лабиринт 32x32\n";
        cout << " 4 - Маска (поиск по маске 01010100)\n";
        cout << " 5 - Макросы Hi, Lo, Swap\n";
        cout << " 6 - Шифрование (3 метода)\n";
        cout << " ESC - выход из программы\n";
        cout << "===========================================================\n";
        cout << "Выберите пункт: ";

        ch = _getch();
        cout << ch << endl;

        switch (ch) {
        case '1': Lab1_Static(); break;
        case '2': Lab2_Dynamic(); break;
        case '3': Labirint(); break;
        case '4': MASKA(); break;
        case '5': Macros(); break;
        case '6': CIPHER(); break;
        case 27: break;
        default:
            cout << "Неверный выбор! Нажмите любую клавишу...\n";
            _getch();
            break;
        }
    } while (ch != 27);

    return 0;
}