Лабораторная по бос7. Отчет по лабораторной работе 7 Исполнитель темы ст гр. Исб120 Масляных А. Д
Скачать 63.34 Kb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования "Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых" (ВлГУ) СМК 8/3-16 Срок хранения 6 месяцев ВЛГУ.10.05.04.10.5.00 ПЗ УТВЕРЖДАЮ Заведующий кафедрой доктор технических наук, профессор ________________ М.Ю. Монахов “____”__________________ 20____ ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №7
Владимир 2022 ФОРМУЛИРОВКА ЗАДАНИЯ Написать клиент-серверное приложение, реализующее протокол идентификации Шнорра. ХОД ВЫПОЛНЕНИЯ РАБОТЫ Проанализировать задачу. Поставить цель перед программой. Придумать алгоритмы для программы. Код программы Client.py from Cryptodome.Util.number import * import socket class Two_Pass_Authentication_with_num: def __init__(self): self.socket = socket.socket() self.socket.connect(('localhost', 5534)) def input(self): self.sms = b"Security of information systems" print(self.sms) self.send(b"Go") self.q = int(self.recv()) self.p = int(self.recv()) print(self.q,self.p) self.S = bytes_to_long(self.sms) self.v = getPrime(5) print(f"p : {self.p}\n" f"q : {self.q}\n" f"S : {self.S}\n" f"V : {self.v}\n") self.send(str(self.v).encode("utf-8")) self.transform_the_data() def transform_the_data(self): self.no_of_iterations = 1 for i in range(self.no_of_iterations): self.w = getPrime(5) self.r = getPrime(5) print("r",self.r) self.x = (self.v**self.r)%self.p print("x", self.x) self.send(str(self.x).encode("utf8")) e = int(self.recv()) y = pow(self.v,(self.q-self.r),self.p) print("y",y) self.send(str(y).encode("utf8")) self.s = (self.r + (self.w * e)) % self.q print("s", self.s) self.send(str(self.s).encode("utf8")) count = int(self.recv()) if (count == self.no_of_iterations): print("Есть секрет") else: print("Секрета нет") def send(self, data): self.socket.send(data) def recv(self): soc = self.socket.recv(1024) soc = soc.decode("utf8") return soc if __name__ == '__main__': Two_Pass_Authentication_with_num = Two_Pass_Authentication_with_num() Two_Pass_Authentication_with_num.input() Server.py import socket import threading from Cryptodome.Util.number import * class Two_Pass_Authentication_with_num: def __init__(self): self.socket = socket.socket() self.socket.bind(('localhost', 5534)) self.n = 0 self.v = 0 def connect(self): self.socket.listen(0) print("Слушаем сервер:") self.conn, self.addr = self.socket.accept() print(f"Подключение, {self.addr}") self.recv() def recv(self): while True: data = self.conn.recv(1024) if data.decode("utf-8") == "Go": self.generate_n() print(self.q,self.p) self.conn.send(f"{self.p}".encode("utf-8")) self.conn.send(f"{self.q}".encode("utf-8")) self.v = int(self.conn.recv(1024).decode("utf-8")) print(f"p : {self.p}\n" f"q : {self.q}\n" f"V : {self.v}\n") self.check_data() if not data: break def check_data(self): count = 0 no_of_iterations = 1 for i in range(no_of_iterations): x = self.recv_num() e = getPrime(5) self.conn.send(f"{e}".encode("utf-8")) y = self.recv_num() s = self.recv_num() print("=====================================================") print("Итерация " + str(i + 1)) print("x = ", x) print("e = ", e) print("y = ", y) z = x print("z = ", z) print("\n Итерация: " + str(i + 1) + ": ", end="") if (x==z): print("Пройдено") count += 1 else: print("Феил") print("=====================================================") self.conn.send(f"{count}".encode("utf-8")) if (count == no_of_iterations): g = "Есть секрет" print(g) else: f = "Секрета нет" print(f) def recv_num(self): data = self.conn.recv(1024) data = data.decode("utf-8") data = int(data) return data def generate_n(self): self.p = 48731 self.q = 443 # self.n = p * q Two_Pass_Authentication = Two_Pass_Authentication_with_num() One_Pass_Authentication_thread = threading.Thread(target=Two_Pass_Authentication.connect) One_Pass_Authentication_thread.start() ВЫХОДНЫЕ ДАННЫЕ ПРОГРАММЫ: Протокол идентификации Шнорра Клиент: Сервер: |