ИБ_3
.docxГУАП
КАФЕДРА № 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 – Результат работы программы
Выводы:
В ходе лабораторной работы мы ознакомились с классической сетью Фейстеля. Создали программу которая шифрует и дешифрует любое сообщение с помощью сети Фейстеля. Полученный результат перед шифровки и после дешифровки совпали.