#!/usr/bin/python
import socket
import random
from rsa_math import *
def msg_num(message_s):
np_s = 0
for char in message_s:
np_s <<= 8
np_s += ord(char)
return np_s
def num_msg(np_r):
nm = []
while np_r > 0:
nm.insert(0, chr(np_r & 255))
np_r >>= 8
message_r = "".join(nm)
return message_r
def encript(np, e_r, n_r):
ne_e = pow(np, e_r) % n_r
return ne_e
def desencriptar(ne_r, d, n):
np_r = pow(ne_r, d) % n
return np_r
def extended_gcd(a, b):
x, ant_x = 0, 1
y, ant_y = 1, 0
while b:
coc = a // b
a, b = b, a % b
x, ant_x = ant_x - coc*x, x
y, ant_y = ant_y - coc*y, y
return (ant_x, ant_y, a)
def send(hola):
server_c.send(hola, ser)
return
def received(serv):
algo = server_c.recv(1024)
return hola
def main():
server = socket.socket()
server.bind(("localhost", 1122))
server.listen(1)
print "Waiting for connection"
print "Conected"
server_c, direccion = server.accept()
p = 13
q = 11
r = p*q
phi = (p - 1)*(q - 1)
e = 23
gcd = 0
while (gcd != 1):
gcd = extended_gcd(e, phi)
d = mod_inver(e, phi)
send(n, serv)
send(e, serv)
print "Sent key"
n_r = received(serv)
e_r = received(serv)
print "Key received"
messagee_r = ""
print "staring"
while (message_r != "End") :
message_s = "cristhian"
np_s = msg_num(message_s)
ne_s = encrypt(np_e, e_r, n_r)
enviar(ne_e)
print "Send"
ne_r = received()
np_r = desencrypt(ne_r, d, n)
message_r = num_msg(np_r)
print "Received: ", message_r
server.close()
server_c.close()
main()
()