# -*- coding: utf-8 -*- import tkinter as tk from random import SystemRandom from Interface import Interface, puissance_mod_rapide class InterfaceClient(Interface): def __init__(self): Interface.__init__(self, "client") # à compléter self.sendHelloButton = tk.Button(self, text="Hello", command=self.hello) self.sendHelloButton.pack() self.keyExchangeButton = tk.Button(self, text="KeyExchange", command=self.keyExchange, state="disabled") self.keyExchangeButton.pack() def hello(self): """envoie en clair le message HELLO""" self.entree.set("HELLO") self.send() self.sendHelloButton['state'] = "disabled" self.keyExchangeButton['state'] = "enable" def keyExchange(self): """attend la clé publique du serveur choisit une clé symétrique aléatoire de 7 caractères la transmet en la chiffrant avec la clé publique du serveur attend le message Finished du serveur chiffré avec cette clé""" self.receive() clePubliqueServeur = tuple(map(int, self.message.get().split(";"))) print(clePubliqueServeur) # cleSymetriqueClair = symKeyGen() # cleSymetriqueClair_bytes = int.from_bytes(cleSymetriqueClair, "big") cleSymetrique_chifree = self.chiffre_RSA(cleSymetriqueClair_bytes, clePubliqueServeur) self.entree.set(str(cleSymetrique_chifree)) self.send() # self.set_cleSymetrique(cleSymetriqueClair) self.receive() if self.message.get() == "Finished": print("Connection sécurisée établie ☺") self.keyExchangeButton['state'] = "disabled" self.sendButton['state'] = "enabled" self.recvButton['state'] = "enabled" def chiffre_RSA(self, msg, cle): """chiffre un message avec une clé publique""" return puissance_mod_rapide(msg, cle[0], cle[1]) def symKeyGen(): """renvoie une clé symétrique aléatoire de 7 caractères""" return bytes([SystemRandom().randint(0, 255) for _ in range(7)]) It = InterfaceClient() It.mainloop()