You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.2 KiB

# -*- 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()
4 months ago
self.keyExchangeButton = tk.Button(self, text="KeyExchange", command=self.keyExchange, state="disabled")
self.keyExchangeButton.pack()
4 months ago
def hello(self):
"""envoie en clair le message HELLO"""
self.entree.set("HELLO")
self.send()
4 months ago
self.sendHelloButton['state'] = "disabled"
self.keyExchangeButton['state'] = "normal"
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 ☺")
4 months ago
self.keyExchangeButton['state'] = "disabled"
self.sendButton['state'] = "normal"
self.recvButton['state'] = "normal"
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()