Advertisement
Stingaleed

Socket-Server

May 19th, 2022
566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.38 KB | None | 0 0
  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
Add Comment
Please, Sign In to add comment
Advertisement