С++
Написать код программы для реализации алгоритма шифрования "Шифр Цезаря"
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.
Обязательное условие – украинский алфавит
Чтобы было меньше проблем, используйте большие буквы.
чем легче код, тем лучше, и желательно с пояснением
Answers & Comments
#include <iostream>
#include <string>
using namespace std;
// Функция для шифрования строки по алгоритму Цезаря
string encrypt(string text, int key)
{
string result = ""; // Пустая строка для хранения зашифрованного текста
for (int i = 0; i < text.length(); i++) // Цикл по всем символам текста
{
char c = text[i]; // Текущий символ
if (c >= 'A' && c <= 'Z') // Если символ - большая латинская буква
{
c = (c - 'A' + key) % 26 + 'A'; // Сдвигаем символ на key позиций вправо по алфавиту и приводим к диапазону от A до Z
}
else if (c >= 'А' && c <= 'Я') // Если символ - большая кириллическая буква
{
c = (c - 'А' + key) % 32 + 'А'; // Сдвигаем символ на key позиций вправо по алфавиту и приводим к диапазону от А до Я
}
result += c; // Добавляем символ к зашифрованному тексту
}
return result; // Возвращаем зашифрованный текст
}
// Главная функция программы
int main()
{
string text; // Строка для хранения исходного текста
int key; // Число для хранения ключа шифрования
cout << "Введите текст: "; // Выводим приглашение для ввода текста
getline(cin, text); // Считываем текст с клавиатуры
cout << "Введите ключ: "; // Выводим приглашение для ввода ключа
cin >> key; // Считываем ключ с клавиатуры
string encrypted = encrypt(text, key); // Шифруем текст по алгоритму Цезаря с заданным ключом
cout << "Зашифрованный текст: " << encrypted << endl; // Выводим зашифрованный текст на экран
return 0; // Завершаем программу
}
Объяснение:
#include <iostream>
#include <string>
using namespace std;
const int ALPHABET_SIZE = 33; // размер алфавита
string caesarCipher(string message, int key) {
string cipher = ""; // зашифрованное сообщение
char alphabet[ALPHABET_SIZE] = {'А', 'Б', 'В', 'Г', 'Ґ', 'Д', 'Е', 'Є', 'Ж', 'З', 'И', 'І', 'Ї', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ю', 'Я', ' '}; // украинский алфавит
// пройти по каждому символу в сообщении
for (int i = 0; i < message.length(); i++) {
char c = message[i];
int index = -1;
// найти индекс символа в алфавите
for (int j = 0; j < ALPHABET_SIZE; j++) {
if (c == alphabet[j]) {
index = j;
break;
}
}
// зашифровать символ
if (index != -1) {
int cipherIndex = (index + key) % ALPHABET_SIZE;
cipher += alphabet[cipherIndex];
} else {
cipher += c; // оставить символ без изменений, если его нет в алфавите
}
}
return cipher;
}
int main() {
string message;
int key;
cout << "Введите сообщение для шифрования: ";
getline(cin, message);
cout << "Введите ключ шифрования: ";
cin >> key;
// зашифровать сообщение и вывести результат
string cipher = caesarCipher(message, key);
cout << "Зашифрованное сообщение: " << cipher << endl;
return 0;
}.
В функции caesarCipher происходит зашифровка сообщения, которое пользователь вводит через консоль, используя заданный ключ. Каждый символ сообщения преобразуется с помощью формулы (индекс символа + ключ) % размер алфавита, и результат сохраняется в зашифрованном сообщении cipher. Если символ не находится в алфавите, он остается без изменений.
После зашифровки сообщения, программа выводит результат в консоль.