# -*- coding: utf-8 -*- import tkinter as tk from Interface import Interface class InterfaceServeur(Interface): def __init__(self): Interface.__init__(self, "serveur") self.n = 870567544966633301 self.e = 42205 self.d = 769020235650503533 # à compléter self.cle_symetrique = None self.btn_hello = tk.Button("Serveur Hello", command=self.hello) self.btn_finished = tk.Button("Finished", command=self.finish) def hello(self): """attend la réception du message HELLO depuis le client, puis envoie en clair sa clé publique""" msg_recu = self.receive() if msg_recu == "HELLO": self.entree.set(self.n) self.send() def finish(self): """attend la réception de la clé symétrique, la déchiffre avec sa clé privée, la mémorise et envoie le message Finished chiffré avec cette clé""" msg_recu = self.receive() self.cle_symetrique = self.dechiffre_RSA(msg) self.send("Finished") def dechiffre_RSA(self, msg): """déchiffre un message avec sa clé privée""" return self.puissance_mod_rapide(msg , self.d, self.n) def puissance_mod_rapide(self, a, b, n): """renvoie a**b mod n""" if b == 1: return a elif b == 2: a2 = (a**2)%n elif b % 2 == 0: return self.puissance_mod_rapide(a2, b // 2, n) else: return (a * self.puissance_mod_rapide(a2, b // 2, n)) % n It = InterfaceServeur() It.mainloop()