import socket
import random
import math
def euclides(a,b):
x = a
y = b
if (x<y):
z=x
x=y
y=z
gx=x
gy=y
u1=1
u2=0
v1=0
v2=1
u=0
v=1
while (y != 0):
q = (x/y)
r = x % y
x = y
y = r
if (r!=0):
u=u1-q*u2
v=v1-q*v2
u1=u2
v1=v2
u2=u
v2=v
mcd=x
sv=v
if (u<0):
u=u
if (v<0):
v=v
if (sv<0):
sv=gx+sv
if (mcd==1):
return sv
else:
pass
def alice_DesencriptaMensaje(cifrado,d,n):
print "Alicia ahora puede obtener el mensaje original a partir del texto cifrado"
return (cifrado**d)%n
def main():
p=61
q=53
n=p*q
n_p=(p-1)*(q-1)
e=17
d=euclides(e,n_p)
print "##Cliente##\\n"
print "p: ",p
print "q: ",q
print "e: ",e
host = "localhost"
puerto= 9999
socket1=socket.socket()
socket1.connect((host,puerto))
print "Alicia manda su clave publica a Bob"
socket1.send(str(n))
socket1.send(str(e))
cifrado=socket1.recv(1024)
print "\\nAlicia recibe el texto cifrado"
socket1.close()
mensaje=alice_DesencriptaMensaje(int(cifrado),d,n)
print "\\nEl mensaje original es:",mensaje
main()