Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИБ_3

.docx
Скачиваний:
108
Добавлен:
18.12.2019
Размер:
80.54 Кб
Скачать

ГУАП

КАФЕДРА № 51

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Е.Д. Пойманова

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 3

Классическая сеть Файстеля

по курсу: ОСНОВЫ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4616

Павлов А.В

подпись, дата

инициалы, фамилия

Санкт-Петербург

2019

Цель работы: Исследовать принципы работы классической сети Файстеля. Убедиться в обратимости сети Файстеля – зашифровать и дешифровать преложенное сообщение.

Вариант 12

Зашифруйте фразу из известного кинофильма: Куй железо не отходя от кассы

Ключ: Ваше полное имя (Алексей)

Длина блока 16 бит

Образующая функция: сложение по модулю два.

Ход работы

Реализовывать классическую сеть Фейстеля будем в среде Python. Разобьем текст на блоки длинной 2 символа, брать будем два ближайших символа, т.е Ку-й -же и так далее . Символы переведем в десятичный код с помощью встроенной chr. После этого следуем алгоритму Фейстеля, шифруем текст.

Li=Ri-1(+)F(Li,K)

Ri=Li-1

Li – левая часть блока

Ri – правая часть.

Рисунок 1 – Схема сети Фейстеля

Далее напишем наш код программы и проверим результат работы.

Листинг 1 – Код программы

ROUNDS = 16

KEY = 'Алексей'

text = 'Куй железо не отходя от кассы'

block = []

key_pos = 0

if len(text) % 2 != 0 :

text = text +' '

#Разделяем текст на блоки по 2 символа

for i in range(0, len(text), 2):

block.append(text[i:i + 2])

def festel(L,R,key_pos):

for i in range(ROUNDS):

K = ord(KEY[key_pos % 7::][0])

temp = R ^ (L ^ K)

R = L

L = temp

key_pos += 1

end = (chr(R) + chr(L))

return end,key_pos

def festel_decript(L,R, key_pos):

for i in range(ROUNDS):

K = ord(KEY[key_pos % 7::][0])

temp = R ^ (L ^ K)

R = L

L = temp

key_pos -= 1

end = (chr(L) + chr(R))

return end,key_pos

print('\nШифруем\n')

shifr = []

for x in block:

block,key_pos = festel(ord(x[0]), ord(x[1]), key_pos)

shifr.append(block)

print(''.join(shifr))

print('\nДешифруем\n')

defshifr=[]

key_pos -= 1

for x in shifr[::-1]:

block,key_pos = festel_decript(ord(x[0]), ord(x[1]), key_pos)

defshifr.append(block)

defshifr = ''.join(defshifr)

print(defshifr[::-1])

Рисунок 2 – Результат работы для первого блока

Рисунок 3 – Результат работы программы

Выводы:

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

Соседние файлы в предмете Информационная безопасность