С++
Написать код программы для реализации алгоритма шифрования "Шифр Цезаря"
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.
Обязательное условие – украинский алфавит
Чтобы было меньше проблем, используйте большие буквы.
Answers & Comments
Ответ:
Вот пример кода программы на C++, реализующей шифр Цезаря для украинского алфавита:
#include <iostream>
#include <string>
using namespace std;
string encrypt(string plaintext, int shift) {
string ciphertext = "";
int n = plaintext.length();
for (int i = 0; i < n; i++) {
char c = plaintext[i];
if (c >= 'А' && c <= 'Я') {
c = ((c - 'А' + shift) % 33) + 'А';
}
ciphertext += c;
}
return ciphertext;
}
string decrypt(string ciphertext, int shift) {
string plaintext = "";
int n = ciphertext.length();
for (int i = 0; i < n; i++) {
char c = ciphertext[i];
if (c >= 'А' && c <= 'Я') {
c = ((c - 'А' - shift + 33) % 33) + 'А';
}
plaintext += c;
}
return plaintext;
}
int main() {
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;
}
Функция encrypt() принимает на вход открытый текст и сдвиг (целое число), а возвращает зашифрованный текст. Она проходится по каждому символу в открытом тексте и заменяет его символом, находящимся на shift позиций левее (если shift отрицательный) или правее (если shift положительный) в украинском алфавите.
Функция decrypt() принимает на вход зашифрованный текст и тот же сдвиг, что использовался при шифровании, а возвращает расшифрованный текст. Она проходится по каждому символу в зашифрованном тексте и заменяет его символом, находящимся на -shift позиций левее (если shift был положительный) или на shift позиций правее (если shift был отрицательный) в украинском алфавите.
В main() пользователю предлагается ввести открытый текст и сдвиг, после чего программа выводит зашифрованный и расшифрованный текст.