-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
52 lines (40 loc) · 1.37 KB
/
server.py
File metadata and controls
52 lines (40 loc) · 1.37 KB
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
import socket
from secure import *
from Crypto.PublicKey import RSA
import re
def sanitizeRequest(request):
sanitized_request = re.sub(r'[^\w\s]', '', str(request.decode())) # sanitize message
return sanitized_request
def server():
session_key = generateSessionKey()
s = socket.socket()
print('Socket created')
s.bind(('localhost', 9999))
s.listen(1)
print('Waiting for connection...')
c, addr = s.accept()
print('Connected with ', addr)
# to share session key using RSA
c_public_key = RSA.import_key(c.recv(2048))
enc_session_key = encryptSessionKey(session_key, c_public_key)
c.send(bytes(enc_session_key))
while True:
# message from client to server
encrypted_request = b""
while True:
chunk = c.recv(4096)
encrypted_request += chunk
if len(chunk)<2048:
break
if not encrypted_request:
break
request = decryptData(encrypted_request, session_key)
sanitized_request = sanitizeRequest(request)
print("Client", sanitized_request)
# message from server to client
response = bytes(input("Server -> ").encode())
encrypted_response = encryptData(response, session_key)
c.send(encrypted_response)
c.close()
if __name__ == "__main__":
server()