From 1b94eeb1183be3df6d0c1d340c07a2b7cac69a98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Lubiak?= Date: Wed, 22 Jun 2022 17:25:14 +0200 Subject: [PATCH] Added encryption and refactorized code --- client.py | 29 ++++++++++++++++++++++------- server.py | 31 +++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/client.py b/client.py index eb42679..5997089 100755 --- a/client.py +++ b/client.py @@ -1,23 +1,37 @@ -import socket, time, threading +from socket import socket, AF_INET, SOCK_STREAM +from threading import Thread +from time import sleep +from subprocess import run +from sys import argv +try: + from cryptography.fernet import Fernet +except: + run("python3 -m pip install cryptography") + from cryptography.fernet import Fernet class client(): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s = socket(AF_INET, SOCK_STREAM) def __init__(self): - self.s.connect(('127.0.0.1', 12345)) + if len(argv) == 4: k = argv[3].encode() + else: + k = Fernet.generate_key() + print(k) + self.f = Fernet(k) + self.s.connect((argv[1], int(argv[2]))) def sMsg(self, msg): - self.s.send(msg.encode()) + self.s.send(self.f.encrypt(msg.encode())) def rMsg(self): while True: d = '' - d = self.s.recv(1024).decode() + d = self.f.decrypt(self.s.recv(1024)).decode() print(end=d) - time.sleep(0.1) + sleep(0.1) def chat(self): - receiving = threading.Thread(target=self.rMsg) + receiving = Thread(target=self.rMsg) receiving.daemon = True receiving.start() while True: @@ -27,5 +41,6 @@ class client(): self.sMsg(msg) if __name__ == '__main__': + run("clear") Client = client() Client.chat() diff --git a/server.py b/server.py index 2ac18d1..fea3893 100755 --- a/server.py +++ b/server.py @@ -1,31 +1,46 @@ -import socket, threading, time +from socket import socket, AF_INET, SOCK_STREAM +from threading import Thread +from time import sleep +from subprocess import run +from sys import argv +try: + from cryptography.fernet import Fernet +except: + run("python3 -m pip install cryptography") + from cryptography.fernet import Fernet class Server: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s = socket(AF_INET, SOCK_STREAM) def __init__(self): - self.s.bind(('127.0.0.1', 12345)) - self.s.listen(5) + if len(argv) == 4: k = argv[3].encode() + else: + k = Fernet.generate_key() + print(k) + self.f = Fernet(k) + self.s.bind((argv[1], int(argv[2]))) + self.s.listen(3) self.client, self.addr = self.s.accept() def rMsg(self): while True: d = '' - d = self.client.recv(1024).decode() + d = self.f.decrypt(self.client.recv(1024)).decode() print(end=d) - time.sleep(0.1) + sleep(0.1) def chat(self): - self.receiving = threading.Thread(target=self.rMsg) + self.receiving = Thread(target=self.rMsg) self.receiving.daemon = True self.receiving.start() while True: msg = input() msg = f"\nADMIN: {msg}\n" print(msg) - self.client.send(msg.encode()) + self.client.send(self.f.encrypt(msg.encode())) if __name__ == '__main__': + run("clear") Server_m = Server() Server_m.chat() Server_m.receiving.join()