Главная страница
Навигация по странице:

  • ФОРМУЛИРОВКА ЗАДАНИЯ Написать клиент-серверное приложение, реализующее протокол идентификации Шнорра. ХОД ВЫПОЛНЕНИЯ РАБОТЫ

  • Код программы Client.py

  • ВЫХОДНЫЕ ДАННЫЕ ПРОГРАММЫ

  • Лабораторная по бос7. Отчет по лабораторной работе 7 Исполнитель темы ст гр. Исб120 Масляных А. Д


    Скачать 63.34 Kb.
    НазваниеОтчет по лабораторной работе 7 Исполнитель темы ст гр. Исб120 Масляных А. Д
    АнкорЛабораторная по бос7
    Дата12.05.2022
    Размер63.34 Kb.
    Формат файлаdocx
    Имя файлаBOS_laba7.docx
    ТипОтчет
    #523928

    Министерство образования и науки Российской Федерации

    Федеральное государственное бюджетное образовательное
    учреждение высшего образования
    "Владимирский государственный университет имени Александра
    Григорьевича и Николая Григорьевича Столетовых"

    (ВлГУ)
    СМК 8/3-16

    Срок хранения 6 месяцев

    ВЛГУ.10.05.04.10.5.00 ПЗ

    УТВЕРЖДАЮ

    Заведующий кафедрой

    доктор технических наук, профессор

    ________________ М.Ю. Монахов

    “____”__________________ 20____

    ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №7


    Исполнитель темы




    ст. гр. ИСБ-120 Масляных А.Д.




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





    Научный руководитель





    Матвеева А.П.





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




    Владимир 2022

    ФОРМУЛИРОВКА ЗАДАНИЯ
    Написать клиент-серверное приложение, реализующее протокол идентификации Шнорра.

    ХОД ВЫПОЛНЕНИЯ РАБОТЫ


    1. Проанализировать задачу.

    2. Поставить цель перед программой.

    3. Придумать алгоритмы для программы.


    Код программы

    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()

    ВЫХОДНЫЕ ДАННЫЕ ПРОГРАММЫ:

    Протокол идентификации Шнорра

    Клиент:



    Сервер:



    написать администратору сайта