题目:
from Crypto.Util.number import *
from secret import flag
m = bytes_to_long(flag)
p = getPrime(512)
q = getPrime(512)
n = p*q
c = pow(m,n-p-q+3,n) ##c=pow(m,phi+2,n)
print(f'n = {n}')
print(f'c = {c}')
n = 115140122725890943990475192890188343698762004010330526468754961357872096040956340092062274481843042907652320664917728267982409212988849109825729150839069369465433531269728824368749655421846730162477193420534803525810831025762500375845466064264837531992986534097821734242082950392892529951104643690838773406549
c = 406480424882876909664869928877322864482740577681292497936198951316587691545267772748204383995815523935005725558478033908575228532559165174398668885819826720515607326399097899572022020453298441
# phi=(p-1)*(q-1)=n-p-q+1
# c=m^(n-p-q+3) mod n=m^(phi+2) mod n=(m^phi mod n)*(m^2 mod n)
# 由欧拉定理可知 m^phi≡1(mod n)
# 则c=m^2 mod n=pow(m,2,n)
EXP:
from Cryptodome.Util.number import *
from gmpy2 import iroot
n = 115140122725890943990475192890188343698762004010330526468754961357872096040956340092062274481843042907652320664917728267982409212988849109825729150839069369465433531269728824368749655421846730162477193420534803525810831025762500375845466064264837531992986534097821734242082950392892529951104643690838773406549
c = 406480424882876909664869928877322864482740577681292497936198951316587691545267772748204383995815523935005725558478033908575228532559165174398668885819826720515607326399097899572022020453298441
for i in range(65537):
c1 = c+i*n
m,f = iroot(c1,2)
if f:
print(i)
print(long_to_bytes(m).decode())
exit()