from Crypto.Util.number import * from gmpy2 import * import random p,q = getPrime(512),getPrime(512) N = p*q phi = (p-1)*(q-1) m = bytes_to_long(b'flag{You_really_got_it!}') while(1): e = random.randint(2,10) if GCD(e,phi) == 1: break c = pow(m,e,N) print(f'c={c}') print(f'e={e}') for k inrange(100): if iroot(c+k*N,e)[1]: m = iroot(c+k*N,e)[0] print(f'k={k}') print(long_to_bytes(m)) break
from Crypto.Util.number import * from gmpy2 import * import random p,q = getPrime(512),getPrime(512) N = p*q phi = (p-1)*(q-1) m = bytes_to_long(b'flag{You_got_it!}') e = 65537 d = inverse(e,phi) c = pow(m,e,N) print(f'N={N}') print(f'd={d}') print(f'c={c}') K = d*e-1 while(K%2 ==0): K = K//2 t = K while(True): a = random.randint(2,N) if N % a == 0: print(a) break while(pow(a,t,N)!= 1): a = a*a a = gmpy2.iroot(a,2)[0] p = GCD(pow(a,t,N)-1,N) if p != 1: q = N // p print('分解成功') print(p,q) break