0%

[香山杯 2023]lift ZMJ4396的WriteUp

2023-10-17 09:25By
ZMJ4396
HenselLiftingCRYPTO

Too simple

import itertools from Crypto.Util.number import * hint = 251 n = 108960799213330048807537253155955524262938083957673388027650083719597357215238547761557943499634403020900601643719960988288543702833581456488410418793239589934165142850195998163833962875355916819854378922306890883033496525502067124670576471251882548376530637034077 e = 3359917755894163258174451768521610910491402727660720673898848239095553816126131162471035843306464197912997253011899806560624938869918893182751614520610693643690087988363775343761651198776860913310798127832036941524620284804884136983215497742441302140070096928109039 c = 72201537621260682675988549650349973570539366370497258107694937619698999052787116039080427209958662949131892284799148484018421298241124372816425123784602508705232247879799611203283114123802597553853842227351228626180079209388772101105198454904371772564490263034162 e //= hint PR.<x> = PolynomialRing(Zmod(n)) f = e * x - 1 f = f.monic() x = f.small_roots(X=2^256, beta=4. / 6.)[0] p = gcd(ZZ(f(x)), n).nth_root(4) q = n // p^5 phi = p^4 * (p-1) * (q-1) d = inverse_mod(e, phi) m1 = pow(c, d, n) m1p = Zmod(p^5)(m1) m1q = Zmod(q)(m1) mp_list = m1p.nth_root(hint, all=True) # print(f'{mp_list = }') mq_list = m1q.nth_root(hint, all=True) # print(f'{mq_list = }') for mp, mq in itertools.product(mp_list, mq_list): m = crt([ZZ(mp), ZZ(mq)], [p^5, q]) msg = long_to_bytes(int(m)) if (b'flag' in msg): print(msg)
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论