from Crypto.Util.number import inverse, long_to_bytes import math
n = 1055318040944102362946870824758284112187881439733520264163925427624371039188408 \ 6124172619325393637064819568245261834319547171964939408699779313765351896673921 \ 2122830015579955183805636213883066694989610003565432493653164047938048521354525 \ 623612253955387430773546124647105772639376194421783783651686606080214099
c = 6838127295540107402282470465780599628759317234806902778570348919850980664834107 \ 2270122496170360873810753440165503811371596435126722398264389032410916586193140 \ 7892193671978412352275860434939944023297151164991809322828884753468552635819180 \ 4172060250409498531941883162873696671060909325234109062997554795436940
hint = 2254571296159459611390959493560831065109921631767708603680850435226778110947934 \ 4217351256511531313022761442319626824021777583111841778031801484228020974742627 \ 1227826513967791945116378179885000662888744992914390207196310600996050316737090 \ 9993999623381332223707455892508533158768182263124533763402827488427796661769534 \ 5555305431032890129908315902905016995081288548688468234726304576491890719692231 \ 3892044095742248895091717187372068779768743879411865275203496650858608
e = 65537
h_prime = hint // 233
a = 2
pow_h_prime = pow(a, h_prime, n)
p = math.gcd(pow_h_prime - 1, n)
if 1 < p < n: print(f"找到 p: {p}") q = n // p print(f"找到 q: {q}")
if p * q == n: print("验证 n = p * q 成功") phi = (p - 1) * (q - 1)
try: d = inverse(e, phi) print(f"计算得到 d: {d}")
m = pow(c, d, n) print(f"解密得到 m: {m}")
flag = long_to_bytes(m) print(f"找到 Flag: {flag}") except ValueError: print("计算 d 出错(e 和 phi 可能不互素)") else:hexo print("验证 n = p * q 失败") else: print(f"计算得到的 GCD ⽆效: {p}") print("⽆法分解 n,请检查计算或尝试其他底数 a")
|