def gen_safeprime(a, b): p=random.randint(a, b) q=(p-1)//2 while (not am.es_primo(p, 30) or not am.es_primo(q, 30)): p=random.randint(a, b) q=(p-1)//2 return p
def descomposicion_ejer3_v2(n): if am.es_primo(n, 500): return(n ,1) if n%2==0: return(n//2, 2) a,b=raices_iguales(n) if type(a)==str: return "ERROR: No existen a!=b tal que f(a)==f(b)" #print("a=", a, "fa=", fa, "b=", b, "fb=", fb) return descomposicion_ejer3(n, a, b)
def descomposicion_ejer3(n, f1, f2): r1=f1+f2 r2=abs(f1-f2) mcd1=am.euclides_extendido(r1, n)[0] if mcd1!=1: return (mcd1, n//mcd1) else: mcd2=am.euclides_extendido(r2, n)[0] if mcd2!=1: return (mcd2, n//mcd2) if am.es_primo(n, 50): return (n, 1)
def funcion_ax(p): if am.es_primo(p, 30): q=(p-1)//2 alfa=random.randint(1, q) temp=am.potencia_modular(alfa, q, p) while(temp==1): alfa=random.randint(2, p-1) temp=am.potencia_modular(alfa, q, p) temp=random.randint(1, q) while am.euclides_extendido(temp, p-1)[0]!=1: temp+=1 alfa=am.potencia_modular(alfa, temp, p) x=random.randint(2, p-2) global clave_x clave_x=x y=am.potencia_modular(alfa, x, p) #Clave publica: (p, alfa, y) res=(p, alfa, y) return res else: return("P: ", p, " no es primo")
def gen_primo(a, b): x=random.randint(a, b) while am.es_primo(x, 30)==False: x=random.randint(a, b) return x
#q=gen_primo(1000, 10000) #n=p*q #print("n=", n) #tini=time.time() #pq=descomposicion_ejer3_v2(n) #print("Tiempo= %.3f" % (time.time()-tini)) #print("p= ", pq[0], "q=", pq[1]) #print("p, q = ", pq) #Ejercicio 5 print('\nEjercicio 5 - RSA') p=20078699 q=19920608 m=1234567890 while(not am.es_primo(p, 30)): p+=1 while (not am.es_primo(q, 30)): q+=1 n=p*q print("N=", n) e=calculo_e(p, q) d=calculo_d(p, q, e) print ("e=", e, " d=", d) cif=cifrado_RSA(m, e, n) descif=descifrado_RSA(cif, d, n) print("Cifrado RSA para : ", m, "=", cif) print("Descifrado RSA: ", descif) #Ejercicio 6 print('\nEjercicio 6')