Ім'я файлу: Лабораторная работа1.docx
Розширення: docx
Розмір: 23кб.
Дата: 14.01.2024
скачати

Лабораторная работа № 1.

На тему: «Симметричные криптографические системы»

Цель работы: Приобретение навыков шифрования информации с использованием простейших методов шифрования.

Задание на лабораторную работу:

  1. Разработать алгоритм и составить программу, позволяющую закодировать любой текст методом перестановка и выполнить обратное преобразование. Язык программирования C#.

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

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

alfavit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'

Далее, нам нужно обозначить программе шаг, то есть смещение при шифровании. Так, например, если мы напишем букву "а" в сообщении, тот при шаге "2", программа выведет нам букву "в".

Итак, создаем переменную smeshenieкоторая будет вручную задаваться пользователем, и message, куда будет помещаться наше сообщение, и, с помощью метода upper(), возводим все символы в нашем сообщении в верхний регистр, чтобы у нас не было ошибок. Потом создаем просто пустую переменную itog, куда мы буем выводить зашифрованное сообщение. Для этого пишем следующее:

smeshenie = int(input('Шаг шифровки: ')) #Создаем переменную с шагом шифровки

message = input("Сообщение для шифровки: ").upper() #создаем переменнную, куда запишем наше сообщение

itog = '' #создаем переменную для вывода итогового сообщения

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

for i in message:

mesto = alfavit.find(i) #Вычисляем места символов в списке

new_mesto = mesto + smeshenie #Сдвигаем символы на указанный в переменной smeshenie шаг

Далее, мы создаем внутри нашего цикла условие if , в нем мы записываем в список itog мы записываем наше сообщение уже в зашифрованном виде и выводим его:

for i in message:

mesto = alfavit.find(i)

new_mesto = mesto + smeshenie

if i in alfavit:

itog += alfavit[new_mesto] # Задаем значения в итог

else:

itog += i

print (itog)

  1. Провести дешифрование заданной криптограммы:

По сути, дешифровка - это алгоритм обратный шифровке. Давайте немного переделаем наш код.

Для начала, я предлагаю сделать "косметическую" часть нашей переделки. Для этого перемещаемся в самое начало кода:

alfavit = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'

smeshenie = int(input('Шаг шифровки: '))

message = input("Сообщение для ДЕшифровки: ").upper() #заменяем слово шифровка, на дешифровка

itog = ''

Остальное можно оставить так же, но если у вас есть желание, то можете поменять названия переменных.

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

if lang == 'RU':

for i in message:

mesto = alfavit_RU.find(i)

new_mesto = mesto + smeshenie # Меняем знак + на знак -

if i in alfavit_RU:

itog += alfavit_RU[new_mesto]

else:

itog += i

else:

for i in message:

mesto = alfavit_EU.find(i) # Меняем знак + на знак -

new_mesto = mesto + smeshenie

if i in alfavit_EU:

itog += alfavit_EU[new_mesto]

else:

itog += i

  1. Осуществить вывод на экран полученной криптограммы.

alfavit_EU = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'

alfavit_RU = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'

smeshenie = int(input('Шаг шифровки: '))

message = input("Сообщение для ДЕшифровки: ").upper()

itog = ''

lang = input('Выберите язык RU/EU: ')

if lang == 'RU':

for i in message:

mesto = alfavit_RU.find(i)

new_mesto = mesto + smeshenie

if i in alfavit_RU:

itog += alfavit_RU[new_mesto]

else:

itog += i

else:

for i in message:

mesto = alfavit_EU.find(i)

new_mesto = mesto + smeshenie

if i in alfavit_EU:

itog += alfavit_EU[new_mesto]

else:

itog += i

print (itog)

Расшифровать текст,

а) зашифрованный шифром Цезаря со сдвигом на 4 позиции:

Уокдгнбэылмбаноюзыбожмдлокнднебиь

Результат:

Чтозжсебяпредствляеткрзптосзсиема

Что представляет из себя криптограмма

б) зашифрованный шифром Цезаря со сдвигом на 6 позиции:

Иыфщлзвмелнмцйкяиыкъбиьъзвгйякялмъзиьдъвбъжязъ

Объяснзтксутьпреображованзиперестановйазжамена

Вывод:

В ходе работы были приобретены навыки шифрования информации с использованием простейших методов шифрования.
скачати

© Усі права захищені
написати до нас