-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclient.py
121 lines (96 loc) · 4.21 KB
/
client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import socket
import sys
import threading
import random
import string
from RSA import RSA
from RC4 import RC4
import time
HOST = '127.0.0.1'
PORT = 50007
Globalvariable = {"RSA_Recieved": False,
"RSA_Sent": False,
"OtherRsaN": 0,
"OtherRsaE": 0,
"n": 0,
"e": 0,
"d": 0,
"RC4Key": "",
"EncRC4Key": "",
"RC4_sent": False,
"OtherRC4": ""}
# 1) create a socket
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2) send a connection request to server
try:
mySocket.connect((HOST, PORT))
except socket.error:
print("Client can't connect")
sys.exit()
print("Trying to connect.... ")
class ThreadReceive(threading.Thread):
def __init__(self, conn):
threading.Thread.__init__(self)
self.connexion = conn
def run(self):
global Globalvariable
while 1:
message_recu = self.connexion.recv(1024).decode("Utf8")
if message_recu[0:14] == "##Rsapubkeyis#":
if not Globalvariable['RSA_Recieved']:
message = message_recu[14:].split("#")
Globalvariable['OtherRsaE'], Globalvariable['OtherRsaN'] = int(message[0]), int(message[1])
self.connexion.send("##YesRsa".encode("Utf8"))
Rsa = RSA()
Globalvariable["EncRC4Key"] = Rsa.crypt(Globalvariable["OtherRsaE"],Globalvariable["OtherRsaN"],Globalvariable["RC4Key"])
Globalvariable['RSA_Recieved'] = True
else:
self.connexion.send("##YesRsa".encode("Utf8"))
elif message_recu == "##YesRsa":
Globalvariable['RSA_Sent'] = True
elif message_recu[:6] == "##RC4#":
if Globalvariable["OtherRC4"] == "" :
Rsa = RSA()
Globalvariable["OtherRC4"] = Rsa.decrypt(Globalvariable["d"],Globalvariable["n"],int(message_recu[6:]))
self.connexion.send("##YesRC4".encode("Utf8"))
else :
self.connexion.send("##YesRC4".encode("Utf8"))
elif message_recu == "##YesRC4":
if not Globalvariable["RC4_sent"]:
Globalvariable["RC4_sent"] = True
elif Globalvariable['RSA_Sent'] and Globalvariable['RSA_Recieved'] and message_recu[0:14] != "##Rsapubkeyis#" and message_recu != "##YesRsa" and message_recu != "##YesRC4":
Rc44 = RC4()
Rc44.shuffle(str(Globalvariable["OtherRC4"]))
message = Rc44.Crypt(message_recu)
print("---->>> " +message)
class Threadsend(threading.Thread):
def __init__(self, conn):
threading.Thread.__init__(self)
self.connexion = conn
def run(self):
global Globalvariable
count = 0
while 1:
if not Globalvariable["RSA_Sent"]:
self.connexion.send(str(
"##Rsapubkeyis#"+str(Globalvariable['e'])+"#"+str(Globalvariable['n'])).encode("Utf8"))
time.sleep(1)
elif Globalvariable["RSA_Sent"] and Globalvariable["RSA_Recieved"] and not Globalvariable["RC4_sent"]:
self.connexion.send(str("##RC4#"+str(Globalvariable['EncRC4Key'])).encode("Utf8"))
time.sleep(1)
elif Globalvariable["RC4_sent"]:
if count == 0:
print("##### You are connected")
count = count + 1
message_emis = input()
Rc4 = RC4()
Rc4.shuffle(Globalvariable["RC4Key"])
m = Rc4.Crypt(message_emis)
self.connexion.send(m.encode("Utf8"))
Rsa = RSA()
Globalvariable["d"], (Globalvariable["n"],Globalvariable["e"]) = Rsa.get_keys(512)
Globalvariable["RC4Key"] = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
th_R = ThreadReceive(mySocket)
th_E = Threadsend(mySocket)
th_E.start()
th_R.start()