Практическая работа №11
Разработка программ шифрования: шифр Цезаря и шифр Атбаш
Section titled “Разработка программ шифрования: шифр Цезаря и шифр Атбаш”Цель работы: Изучить принципы простейших символьных алгоритмов шифрования, освоить работу со строками и символами в C++, а также реализовать два классических шифра: шифр Цезаря и шифр Атбаш.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Шифр Цезаря
Section titled “1. Шифр Цезаря”Шифр Цезаря — один из самых простых и древних методов шифрования. Каждая буква текста заменяется на букву, расположенную через определённое число шагов в алфавите.
Например, при сдвиге shift = 3:
A → DB → EC → F...X → AY → BZ → CСдвиг может быть положительным и отрицательным. Шифр применяется отдельно для заглавных и строчных букв. Цифры, пробелы и знаки остаются неизменными.
2. Шифр Атбаш
Section titled “2. Шифр Атбаш”Шифр Атбаш — моноалфавитная замена, где каждая буква отображается в «зеркальную»:
A ↔ ZB ↔ YC ↔ X...Этот шифр симметричен — операция шифрования совпадает с дешифрованием.
Работа со строками и символами в C++
Section titled “Работа со строками и символами в C++”Для обработки символов используются их ASCII-коды:
'A'..'Z'— диапазон 65–90'a'..'z'— диапазон 97–122
Размер сдвига регулируется операциями:
(char)('A' + (c - 'A' + shift + 26) % 26)Алгоритмы реализации
Section titled “Алгоритмы реализации”1. Алгоритм шифра Цезаря
Section titled “1. Алгоритм шифра Цезаря”- Пройти по каждому символу строки.
- Если символ — буква латиницы:
- определить, находится ли он в
'A'..'Z'или'a'..'z', - применить формулу циклического сдвига.
- определить, находится ли он в
- Иначе — оставить символ без изменений.
- Собрать результат в строку.
2. Алгоритм шифра Атбаш
Section titled “2. Алгоритм шифра Атбаш”Для каждой буквы:
-
если заглавная:
newChar = 'Z' - (c - 'A') -
если строчная:
newChar = 'z' - (c - 'a')
Все не-буквы остаются без изменений.
Пример реализации (C++): Псевдокод
Section titled “Пример реализации (C++): Псевдокод”string encryptCaesar(const string& text, int shift) { // цикл по символам // проверка диапазонов A..Z, a..z // циклический сдвиг}
string decryptCaesar(const string& text, int shift) { // сдвиг в обратную сторону return encryptCaesar(text, -shift);}
string atbash(const string& text) { // для каждой буквы зеркальное отображение}Общие требования
Section titled “Общие требования”- Написать программу на языке C++.
- Реализовать две функции для шифра Цезаря:
encryptCaesardecryptCaesar
- Реализовать функцию:
atbash
- Шифрование должно корректно обрабатывать:
- буквы латинского алфавита (A–Z, a–z),
- любой целый сдвиг (в том числе отрицательный),
- остальные символы должны сохраняться.
- Выводить:
- исходный текст,
- зашифрованный текст,
- расшифрованный текст,
- результат шифра Атбаш.
Задания для выполнения
Section titled “Задания для выполнения”Базовый уровень
Section titled “Базовый уровень”| № | Задача | Описание |
|---|---|---|
| 1 | Шифрование Цезаря | Реализуйте функцию encryptCaesar(), принимающую строку и величину сдвига и возвращающую зашифрованную строку. |
| 2 | Дешифрование Цезаря | Реализуйте функцию decryptCaesar(), использующую обратный сдвиг. |
| 3 | Интеграция | Пользователь вводит текст и сдвиг. Программа выводит: зашифрованный текст и расшифрованный обратно. |
Повышенный уровень
Section titled “Повышенный уровень”| № | Задача | Описание |
|---|---|---|
| 4 | Шифр Атбаш | Реализуйте функцию atbash(). Выполните шифрование введённого текста. |
| 5 | Сравнение шифров | Выведите в консоль сравнение: исходный → Цезарь → Атбаш. |
Контрольные вопросы
Section titled “Контрольные вопросы”- Чем отличаются моноалфавитные и полиалфавитные шифры?
- В чём преимущество и в чём слабость шифра Цезаря?
- Почему шифр Атбаш является полностью симметричным?
- Что происходит с символами, не являющимися буквами алфавита?
- Как обработать отрицательный сдвиг в шифре Цезаря?
Рекомендуемая литература
Section titled “Рекомендуемая литература”- Саймон Сингх — Код. Тайная история шифрования. (Глава о Цезаре)
- Брюс Шнайер — Прикладная криптография. (История шифров)
- Шилдт Г. — C++: Полное руководство. (Работа со строками и ASCII)