Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import time
- from random import getrandbits
- import sha256
- import AES
- array = []
- #Diffie-Hellman
- bits = 32
- b = getrandbits(bits)
- print("b = "+str(b))
- def Diffie_Hellman_first_half(g,prime):
- print("B = "+ str(pow(g, b, prime)))
- return str(pow(g, b, prime))
- def Diffie_Hellman_second_half(A):
- sym_key = str(pow(A, b, int(array[1])))
- return sym_key
- # возведение в степень по модулю
- def pow_mod(x, y, z):
- number = 1
- while y:
- if y & 1:
- number = number * x % z
- y >>= 1
- x = x * x % z
- return number
- sock = socket.socket()
- sock.bind(('', 9090))
- sock.listen(1)
- conn, addr = sock.accept()
- print ('connected:', addr)
- def RSA_digital_ignature_check(data):
- hash = sha256.generate_hash(data).hex()
- print("hash = "+str(hash))
- asci_word = ""
- for char in hash: # Переводим наше слово в аски
- a = char
- b = ord(a)
- asci_word += str(b) # все слово
- asci_word = int(asci_word)
- plain = pow_mod(int(message_array[1]), int(array[4]), int(array[5]))
- if plain == asci_word:
- print("Сообщение дошло без изменений. Личность собеседника установлена")
- else:
- print("Сообщение дошло c искаженими. Кто-то ворвался в наш канал связи")
- #Main function, change sym and RSA
- def change(data):
- array.append(data)
- print(array)
- if len(array) == 3:
- B = Diffie_Hellman_first_half(int(array[0]), int(array[1]))
- array.append(Diffie_Hellman_second_half(int(array[2])))
- conn.send(B.encode('utf8'))
- print("Sym key = " + array[3])
- message_array = []
- while True:
- if len(array)<=5:
- data = conn.recv(1024).decode('utf8')
- change(data)
- continue
- if len(message_array) < 2:
- data = conn.recv(1024)
- message_array.append(data)
- continue
- print("Сообщение которое нам пришло - "+ str(message_array[0]))
- message_array[0] = str(AES.decrypt(array[3],message_array[0]).decode('utf8'))
- print("Расшифрованное сообщение -", str(message_array[0]))
- RSA_digital_ignature_check(message_array[0])
- message_array.clear()
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement