# -*- coding: utf-8 -*- from Connexion import Connexion import tkinter as tk class Interface(tk.Tk): """interface graphique pour envoyer/recevoir/chiffrer/dechiffrer""" def __init__(self, sens): tk.Tk.__init__(self) self.connexion = Connexion(sens) self.title(sens) self.entree = tk.StringVar() tk.Entry(self, textvariable=self.entree, width=30).pack() tk.Label(text="Message reçu : ").pack() self.message = tk.StringVar() tk.Label(textvariable=self.message).pack() self.sendButton = tk.Button(self, text="Send", command=self.send) self.sendButton.pack() self.recvButton = tk.Button(self, text="Receive", command=self.receive) self.recvButton.pack() # self._cleSymetrique = None def send(self): """Envoie le message chiffré.""" message = self.entree.get().encode("utf8") # à compléter pour chiffrer le message if self._cleSymetrique != None: message = chiffre_xor(message, self._cleSymetrique) self.connexion.send(message) def receive(self): """Réceptionne un message depuis le serveur et l'affiche. Attention : bloque tant que le serveur n'envoie rien.""" message = self.connexion.recv() # à compléter pour déchiffrer le message if self._cleSymetrique != None: message = chiffre_xor(message, self._cleSymetrique) self.message.set(message_dechiffre.decode("utf8")) def set_cleSymetrique(self, val): """Définit/met à jour la clé symétrique""" self._cleSymetrique = val def destroy(self): self.connexion.close() tk.Tk.destroy(self) def chiffre_xor(message, cle): """chiffre/déchiffre un message à l'aide d'une clé""" res = b"" for i in range(len(message)): lettre = bytes([message[i] ^ cle[i%len(cle)]]) res += lettre return res