• Предмет: Информатика
  • Автор: mikrob4928
  • Вопрос задан 4 месяца назад

С++
Написать код программы для реализации алгоритма шифрования "Шифр Цезаря"

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.

Обязательное условие – украинский алфавит
Чтобы было меньше проблем, используйте большие буквы.

Ответы

Ответ дал: semviktoriya320
1

Объяснение:

#include <iostream>

#include <string>

using namespace std;

// Функция для шифрования строки на основе ключа

string encrypt(string text, int key) {

string result = "";

int n = text.length();

for (int i = 0; i < n; i++) {

// Получаем код символа

int code = text[i];

// Если символ - буква украинского алфавита (в верхнем регистре)

if (code >= 1040 && code <= 1071) {

// Вычисляем новый код символа

code = (code - 1040 + key) % 32 + 1040;

}

// Добавляем символ к результату

result += (char)code;

}

return result;

}

int main() {

// Задаем исходную строку и ключ

string text = "ПРИВІТ СВІТ";

int key = 5;

// Шифруем строку

string encrypted = encrypt(text, key);

// Выводим зашифрованную строку

cout << encrypted << endl;

return 0;

}


semviktoriya320: В данном коде используется функция encrypt, которая принимает исходную строку и ключ, и возвращает зашифрованную строку. Функция проходит по каждому символу строки, проверяет, является ли он буквой украинского алфавита (в верхнем регистре), и вычисляет новый код символа с помощью заданного ключа. Зашифрованная строка выводится в консоль.
Ответ дал: cevase
1

Ответ:

#include <iostream>

#include <string>

#include <locale>

using namespace std;

string encrypt(string plaintext, int shift) {

string ciphertext = "";

int n = plaintext.length();

for (int i = 0; i < n; i++) {

wchar_t c = plaintext[i];

if (c >= L'А' && c <= L'Я') {

c = ((c - L'А' + shift) % 33) + L'А';

}

ciphertext += c;

}

return ciphertext;

}

string decrypt(string ciphertext, int shift) {

string plaintext = "";

int n = ciphertext.length();

for (int i = 0; i < n; i++) {

wchar_t c = ciphertext[i];

if (c >= L'А' && c <= L'Я') {

c = ((c - L'А' - shift + 33) % 33) + L'А';

}

plaintext += c;

}

return plaintext;

}

int main() {

// установка локали для работы с украинским языком

setlocale(LC_ALL, "uk_UA.UTF-8");

string plaintext, ciphertext;

int shift;

cout << "Введите текст для шифрования: ";

getline(cin, plaintext);

cout << "Введите сдвиг: ";

cin >> shift;

ciphertext = encrypt(plaintext, shift);

cout << "Зашифрованный текст: " << ciphertext << endl;

plaintext = decrypt(ciphertext, shift);

cout << "Расшифрованный текст: " << plaintext << endl;

return 0;

}


cevase: Напишите если заработает
mikrob4928: к сожалению, в поле "Зашифрованный текст:" выводится то же слово, которое вводится в поле "Введите текст для шифрования:"
cevase: #include
#include

using namespace std;

const string ALPHABET = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
const int ALPHABET_SIZE = ALPHABET.size();

int main() {
int shift;
string plaintext;
cout << "Введите сдвиг: ";
cin >> shift;
cout << "Введите текст для шифрования: ";
cin >> plaintext;
cevase: // Преобразование сообщения в зашифрованный текст
string ciphertext = "";
for (char c : plaintext) {
int index = ALPHABET.find(c);
if (index == string::npos) {
// Символ не найден в алфавите, оставляем его без изменений
ciphertext += c;
} else {
// Применяем формулу для шифрования символа
int shifted_index = (index + shift) % ALPHABET_SIZE;
ciphertext += ALPHABET[shifted_index];
}
}
cevase: cout << "Зашифрованный текст: " << ciphertext << endl;
return 0;
}
cevase: попробуйте так
Вас заинтересует