Ejemplo n.º 1
0
def sqrt_mod(a,p):
    """
    Calcula la raiz cuadrada modular de a módulo p
    
    Args:
        a(int): Entero
        p(int): Entero primo
        
    Returns:
        r(int): Raiz de a modulo p        
        
    Examples:
        sqrt_mod(319,353)
        242
    """
    
    if jacobi(a,p) == -1:
        return -1
        
        
    n=1
    
    while jacobi(n,p) != -1:
        n+=1
        
    
    u=0
    s=p-1
    while s%2==0:
        u=u+1
        s=s//2
    print(u,s);
        
    if u == 1:
        r=exp_mod(a,(p+1)/4,p)
    elif u >= 2:
        r=exp_mod(a,(s+1)/2,p)
        b=exp_mod(n,s,p)
        j=0
        
        while j<= u-2:
            base = (inverso_mod(a,p)*r*r)%p
            exp = exp_mod(2,u-2-j,p)  
            if exp_mod(base,exp,p) == (-1%p):
                r=(r*b)%p
            b=(b*b)%p
            j+=1
            
      
    return r
Ejemplo n.º 2
0
def es_primo(p,k=7):
    """
    Esta función comprueba si el número dado es primo o no mediante el algoritmo de Miller-Rabin.

    Args:
        p(int): Número el cual comprobaremos si es primo.
        k(int): Número de iteraciones del algoritmo. Por defecto se incializa a 7.

    Returns:
        bool: True si es primo, False si no lo es.

    Example:
        >>es_primo(123456789101119)
        True
    """
    fin_bucle=True

    if(p in [2,3,5,7,11]):
        return True
    elif(p<11):
        return False#Si no esta contenido en la lista anterior y es menor que el último, no es primo
    if(p%2 != 0):
        s=0
        d=p-1
        while d%2==0:
            s=s+1
            d=d//2

        for i in range(0,k):
            a = random.randint(2,p-1)
            x = exp_mod(a,d,p)
            if(x!=1 and x!=p-1):
                for r in range(1,s):
                    x = exp_mod(x,2,p)
                    if(x%p==1):
                        return False #Es par
                    elif(x%p==p-1):
                        fin_bucle=False
                        break
                if fin_bucle:
                    return False#No encuentra un -1
        return True #Probablemente primo
    else:
        return False #Porque es par
Ejemplo n.º 3
0
import socket
import exp_mod

puerto = raw_input("puerto: ")
n = raw_input("n: ")
g = raw_input("g: ")
x = raw_input("x: ")

tempa = exp_mod.exp_mod(long(g),long(x),long(n) )
cat1= n+','+g+','+str(tempa)

miSocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
miSocket.connect( ("", int(puerto) ) )

print "[ enviando: " + cat1 + "]"
miSocket.send(cat1)	

data, server = miSocket.recvfrom( 100 )

print data
clave = exp_mod.exp_mod(long(data),long(x),long(n))


print clave

	


#miSocket.close()
Ejemplo n.º 4
0
b=244

print("Ejercicio 2. Inverso modular")
print("Parámetros: a=",a," b=",b)
print("Solucion: ",inverso_mod(a,b))
t = timeit.Timer(lambda: inverso_mod(a,b))
print("Tiempo de ejecución medio(",n_ejec,"ejecuciones): ",t.timeit(n_ejec)/n_ejec)
print("---------------------------------------------------------")

a=5
b=596
n=1234

print("Ejercicio 3. Exponenciación modular")
print("Parámetros: a=",a," b=",b,"n=",n)
print("Solucion: ",exp_mod(a,b,n))
t = timeit.Timer(lambda: exp_mod(a,b,n))
print("Tiempo de ejecución medio(",n_ejec,"ejecuciones): ",t.timeit(n_ejec)/n_ejec)
print("---------------------------------------------------------")

a=123456789101119

print("Ejercicio 4. Miller-Rabbin")
print("Parámetros: a=",a)
print("Solucion: ",es_primo(a))
t = timeit.Timer(lambda: es_primo(a))
print("Tiempo de ejecución medio(",n_ejec,"ejecuciones): ",t.timeit(n_ejec)/n_ejec)
print("---------------------------------------------------------")

n=113
a=3
Ejemplo n.º 5
0
import socket
import exp_mod

puerto = raw_input("puerto: ")
y = raw_input("y: ")

print "[ Escuchando::::: ]"

miSocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
miSocket.bind( ("", int(puerto) ) )
miSocket.listen( 1 )

while 1:
	channel, details = miSocket.accept()
	recibido=channel.recv(1024)
 	print "Se\ ha conectado %s" % (str(details))
	
	#0,1,2	
	#n,g,g^x mod n
	val= recibido.split(",")	
	print val

	env=exp_mod.exp_mod(long(val[1]),long(y),long(val[0]) )	
	print str(env) 	
	channel.send(str(env))
	
	clave = exp_mod.exp_mod(long(val[2]),long(y),long(val[0]))	
	print clave

	#channel.close()