Файл: Лабораторный практикум 4.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 62

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Потребность в защите информации существовала издревле. Исторически вплоть до середины XX-го в. все существовавшие алгоритмы можно было разделить на два основных вида сокрытия секретных сообщений: алгоритмы замены, в которых каждый символ секретного сообщения заменялся на другой символ по определенным правилам, известным только посвященным; алгоритмы перестановки, в которых все символы перемешивались по определенным правилам и являлись секретом.

Так, например, одним из самых известных в истории способов сокрытия важной секретной информации является алгоритм Юлия Цезаря, названный, согласно легендам, в честь его изобретателя.
Классический алгоритм Юлия Цезаря

В классическом алгоритме Юлия Цезаря каждый символ исходного секретного сообщения заменяется символом из того же алфавита, отстоящим на три позиции далее. Например, для русского алфавита буква А будет заменена на букву Г, Б – на Д и т.д. Данный алгоритм относится к алгоритмам замены.

Рассмотрим реализацию алгоритма Юлия Цезаря на языке Python:

Задача. На вход программе подается секретное сообщение, состоящее не более, чем из 200 символов, заканчивающееся точкой (другие точки во входных данных отсутствуют). Необходимо зашифровать его следующим образом: заменить каждую английскую букву на букву, стоящую в английском алфавите на 3 буквы далее (алфавит считается циклическим, т.е., перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остаются строчными, а прописные – прописными.

Требуется написать программу, которая будет выводить на экран текст зашифрованного сообщения. Например, если исходный текст был таким:

Zb Ra Cx Dyk.,

то результат шифровки должен быть следующий:

Сe Ud Fa Gbn.

Решение. Из условия задачи известно, что длина секретного сообщения не превышает 200 символов. Это означает, что для хранения секретного (secret_text) и зашифрованного (cypher_text) сообщений можно использовать строковый тип данных string. Само сообщение может содержать 4 типа символов, каждый из которых необходимо обработать в отдельности: строчные (маленькие) буквы; прописные (большие) буквы; точка; остальные символы. Каждую строчную букву необходимо преобразовать в строчную, отстоящую на три позиции в английском алфавите, каждую прописную – преобразовать в прописную, отстоящую на три позиции в английском алфавите, все остальные символы необходимо оставить без изменений, а если очередным символом оказалась точка
, то закончить шифрование и вывести результат:

secret_text = input('Введите секретное сообщение: ')

cypher_text = '' # зашифрованныйтекст

for symbol in secret_text:

if symbol == '.': # очередной символ – точка

cypher_text += symbol break # вывод из цикла, т.к сообщение закончилось

# очереднойсимволбольшаябуква

elif ord(symbol) in range(ord('A'), ord('Z') + 1):

if (ord(symbol) + 3) > ord('Z'):

cypher_text += chr(ord(symbol) + 3 - 26)

else : cypher_text += chr(ord(symbol) + 3)

# очередной символ – большая буква

elif ord(symbol) in range(ord('a'), ord('z') + 1):

if (ord(symbol) + 3) > ord('z'):

cypher_text += chr(ord(symbol) + 3 - 26)

else : cypher_text += chr(ord(symbol) + 3)

else: cypher_text += symbol # любойдругойсимвол

print(cypher_text) # выводзашифрованногосообщения

При решении данной задачи были использованы две встроенные функции ord() и chr(). Первая функция возвращает код символа, который является ее аргументом, из таблицы кодировок, вторая – обратная к ord(), возвращает символ по его коду.

Разновидности криптографического алгоритма Юлия Цезаря

Следует отметить, что существует бесконечное множество разновидностей криптографического алгоритма Юлия Цезаря. Приведем некоторые из возможных модификаций условия данного алгоритма:

- замена каждой буквы алфавита на букву, стоящую в английском алфавите на K букв далее (алфавит считается циклическим, т.е., перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остаются строчными, а прописные – прописными;

- замена каждой буквы алфавита на букву, стоящую в английском алфавите на K букв ранее (алфавит считается циклическим, т.е., перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остаются строчными, а прописные – прописными;

- замена каждой буквы алфавита на букву, стоящую в английском алфавите на K букв далее (алфавит считается циклическим, т.е., перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом преобразуются в прописные, а прописные остаются прописными;

- замена каждой буквы алфавита на букву, стоящую в английском алфавите на K букв ранее, оставив другие символы неизменными. Строчные буквы при этом преобразуются в прописные, прописные остаются прописными, каждая цифра заменяется на следующую за ней, другие символы остаются неизменными (алфавит считается циклическим, т.е., перед буквой A стоит буква Z, перед цифрой 0 – цифра 9).


Задания на лабораторную работу №4 (по вариантам)
Написать программы в среде IDLE в соответствии с номером своего варианта. Номер варианта уточняйте у преподавателя


Номер варианта

Задание №1

Задание №2

Задание №3

Задание №4




Работа со строками

Работа со строками

Перевод чисел

s = "У лукоморья 123 дуб зеленый 456"

1

Вводится слово. Необходимо определить, является ли это слово палиндромом (читается одинаково и вперед и назад, например, слово «Анна» – палиндром). Вывести True, если слово палиндром и False – в противном случае. Программу реализовывать без использования условного оператора if.

Создать строку «Примеры». Получить из заданной строки:

– второй символ строки;

– распаковать последовательность в переменные, определить их тип, сделать обратное преобразование из переменных в строку.

Строку, представляющую число в шестнадцатеричной системе счисления, введенную по запросу с клавиатуры, в случае правильной записи, преобразовать в десятичное число и результат вывести на экран. В противном случае предложить ввести число в шестнадцатеричной системе заново.

Заменить в строке s первый символ на 'О'. Результат вывести на экран

2

Вводится пароль. Убедиться, что пароль введен корректно по следующим критериям: - число символов не менее 8; - присутствует хотя бы один из символов «$#!?-_»; - присутствует хотя бы один из символов заглавной буквы латинского алфавита (A-D). Вывести True, если пароль корректен и False – в противном случае. Программу реализовывать без использования условного оператора if.

Создать строку «Задачи». Получить из заданной строки:

– четвертый символ строки;

– получить слово «дачи» одной операцией;


Строку, представляющую число в восьмеричной системе счисления, введенную по запросу с клавиатуры, в случае правильной записи, преобразовать в десятичное число и результат вывести на экран. В противном случае предложить ввести число в шестнадцатеричной системе заново.

Определить, сколько раз в строке s встречается буква 'у'.

3

Вводится строка из нескольких слов, слова разделены пробелом. Убедиться, что первое и последнее слово во введенной строке не совпадают. Вывести True, если это так и False – в противном случае. Программу реализовать без использования условного оператора if.

Создать строку «Задачи». Получить из заданной строки:

– вывести элементы строки со 2 по 4;

– получить срез последних 4-х элементов;


Число из десятичной системы счисления, введенное по запросу с клавиатуры, в случае правильной записи преобразовать в восьмеричную систему и результат вывести на экран. В противном случае предложить ввести десятичное число заново.


Определить, состоит ли строка s только из букв, ЕСЛИ нет, ТО вывести строку в верхнем регистре.

4

Вводится строка с одним арифметическим действием (сложением) для двух целых чисел. Например, «5+3» или «7 + 2». Обратите внимание на возможные пробелы до и после оператора +. Вычислить, указанное в строке арифметическое действие и результат вывести на экран

Создать строку «Примеры».

Получить из заданной строки:

– проверить, входят ли строки «при» и «имр» в исходную строку;

– создать 3 копии исходной строки;

Число из десятичной системы счисления, введенное по запросу с клавиатуры, в случае правильной записи преобразовать

в двоичную систему и результат вывести на экран. В противном случае предложить ввести десятичное число заново.


Определить длину строки s. ЕСЛИ длина строки превышает 4 символа, ТО вывести строку в нижнем регистре.

5

Вводится строка. Найти первый индекс начала фрагмента «ра» во введенной строке. Результат вывести на экран.

Создать строку «Задачи». Получить из заданной строки:

– получить срез последних 4-х элементов;

- распаковать последовательность в переменные, определить их тип, сделать обратное преобразование из переменных в строку.


Двоичное число, введенное по запросу с клавиатуры, в случае правильной записи преобразовать в десятичное число и результат вывести на экран. В противном случае предложить ввести двоичное число заново.

Определить, встречается ли в строке s буква 'я'. Вывести на экран ее позицию (индекс) в строке.



Контрольные вопросы:

1. Дайте определение строки в Pythonе. В чем их особенности.

2. Перечислите операции (команды) работы со строками и их описание, которые вы использовали при выполнении своей лабораторной работы.

3. Какие методы (алгоритмы) защиты информации существовали исторически первыми? В чем их суть?

4. В чем суть шрифта Цезаря?
Требования к защите отчетной документации.

По каждой выполненной лабораторной работе оформляется отдельный отчет (представляется к защите в виде файла текстового формата Word (с расширением *.doc или *.docx)

Отчет по лабораторной работе должен содержать:

- титульный лист (с датой предоставления отчета)

- цели и задачи, описание методики проведения работы, перечень используемых инструментальных средств;

- результаты выполнения индивидуальных практических заданий (тексты программ и результаты работы программ):

  • Иллюстративные материалы (снимки экрана и (или) иные графические материалы), поясняющие процесс и результаты выполнения работы;

  • Анализ полученных результатов с собственными выводами исполнителя;

  • Ответы на контрольные вопросы (при их наличии).


Защита результатов выполнения лабораторных работ

Все лабораторные работы выполняются индивидуально, защита работы производится в форме собеседования по материалу представленного отчета.

В процессе защиты оцениваются полнота и качество выполнения практических заданий, грамотность использования инструментальных средств, правильность и обоснованность выводов по результатам работы, качество оформления отчета.
Перечень основной и дополнительной литературы
Основная литература:

1. Шелудько, В. М. Основы программирования на языке высокого уровня Python: учебное пособие : [16+] / В. М. Шелудько. – Ростов-на-Дону ; Таганрог : Южный федеральный университет, 2017. – 147 с. : ил. – Режим доступа: по подписке. – URL: https://biblioclub.ru/index.php?page=book&id=500056 .


2. Северенс, Ч. Введение в программирование на Python / Ч. Северенс. – 2-е изд., испр. – Москва : Национальный Открытый Университет «ИНТУИТ», 2016. – 231 с. : схем., ил. – Режим доступа: по подписке. – URL: http://biblioclub.ru/


Дополнительная литература:


1. Абрамян, М.Э. Инструменты и методы разработки электронных образовательных ресурсов по компьютерным наукам / М.Э. Абрамян ; Министерство науки и высшего образования РФ, Южный федеральный университет. – Ростов-на-Дону ; Таганрог : Южный федеральный университет, 2018. – 261 с. : ил. – Режим доступа: по подписке. – URL: http://biblioclub.ru/


2. Хиценко, В.П. Основы программирования : учебное пособие / В.П. Хиценко ; Новосибирский государственный технический университет. – Новосибирск : Новосибирский государственный технический университет, 2015. – 83 с. : схем. – Режим доступа: по подписке. – URL: http://biblioclub.ru/