Загрузка данных
// ========== ШИФРОВАНИЕ ==========
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;
}