Advertisement
Stingaleed

Socket-Server

May 19th, 2022
474
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import socket
  2. import time
  3. from random import getrandbits
  4. import sha256
  5. import AES
  6.  
  7. array = []
  8. #Diffie-Hellman
  9. bits = 32
  10. b = getrandbits(bits)
  11. print("b = "+str(b))
  12.  
  13. def Diffie_Hellman_first_half(g,prime):
  14.     print("B = "+ str(pow(g, b, prime)))
  15.     return str(pow(g, b, prime))
  16.  
  17. def Diffie_Hellman_second_half(A):
  18.     sym_key = str(pow(A, b, int(array[1])))
  19.     return sym_key
  20.  
  21. # возведение в степень по модулю
  22. def pow_mod(x, y, z):
  23.     number = 1
  24.     while y:
  25.         if y & 1:
  26.             number = number * x % z
  27.         y >>= 1
  28.         x = x * x % z
  29.     return number
  30.  
  31.  
  32. sock = socket.socket()
  33. sock.bind(('', 9090))
  34. sock.listen(1)
  35. conn, addr = sock.accept()
  36.  
  37. print ('connected:', addr)
  38.  
  39. def RSA_digital_ignature_check(data):
  40.     hash = sha256.generate_hash(data).hex()
  41.     print("hash = "+str(hash))
  42.     asci_word = ""
  43.     for char in hash:  # Переводим наше слово в аски
  44.         a = char
  45.         b = ord(a)
  46.         asci_word += str(b)  # все слово
  47.     asci_word = int(asci_word)
  48.  
  49.     plain = pow_mod(int(message_array[1]), int(array[4]), int(array[5]))
  50.     if plain == asci_word:
  51.         print("Сообщение дошло без изменений. Личность собеседника установлена")
  52.     else:
  53.         print("Сообщение дошло c искаженими. Кто-то ворвался в наш канал связи")
  54.  
  55. #Main function, change sym and RSA
  56. def change(data):
  57.     array.append(data)
  58.     print(array)
  59.     if len(array) == 3:
  60.         B = Diffie_Hellman_first_half(int(array[0]), int(array[1]))
  61.         array.append(Diffie_Hellman_second_half(int(array[2])))
  62.         conn.send(B.encode('utf8'))
  63.         print("Sym key = " + array[3])
  64.  
  65. message_array = []
  66.  
  67. while True:
  68.     if len(array)<=5:
  69.         data = conn.recv(1024).decode('utf8')
  70.         change(data)
  71.         continue
  72.  
  73.     if len(message_array) < 2:
  74.         data = conn.recv(1024)
  75.         message_array.append(data)
  76.         continue
  77.  
  78.     print("Сообщение которое нам пришло - "+ str(message_array[0]))
  79.     message_array[0] = str(AES.decrypt(array[3],message_array[0]).decode('utf8'))
  80.     print("Расшифрованное сообщение -", str(message_array[0]))
  81.  
  82.     RSA_digital_ignature_check(message_array[0])
  83.  
  84.     message_array.clear()
  85.  
  86. conn.close()
Advertisement
RAW Paste Data Copied
Advertisement