0%

[NSSRound#11 Basic]ez_signin

2024-05-09 02:51By
sea777
RabinCrypto算术推导RSA

Problem: [NSSRound#11 Basic]ez_signin

from pwn import * from gmpy2 import * from Crypto.Util.number import * #------------ 交互部分 ------------ host = 'node4.anna.nssctf.cn' port = 28223 conn = remote(host, port) def interact_with_server(conn): data1 = conn.recvline().decode() data2 = conn.recvline().decode() data3 = conn.recvline().decode() data4 = conn.recvline().decode() num1 = int(re.findall(r'num1= (\d+)', data1)[0]) num2 = int(re.findall(r'num2= (\d+)', data2)[0]) n = int(re.findall(r'n= (\d+)', data3)[0]) c = int(re.findall(r'c= (\d+)', data4)[0]) return num1, num2, n, c # ------------ 解密部分 ------------ num1, num2, n, c = interact_with_server(conn) e = 65536 p = gcd(n,(num1 + num2 ) % n) q = n//p cs = [c] def rabin_decrypt(c,p,q): mp = pow(c, (p + 1) // 4, p) mq = pow(c, (q + 1) // 4, q) yp = inverse(p,q) yq = inverse(q,p) r = (yp * p * mq + yq * q * mp) % n r_ = n - r s = (yp * p * mq - yq * q * mp) % n s_ = n - s return r,r_,s,s_ for i in range(16): ps = [] for c2 in cs: r,r_,s,s_ = rabin_decrypt(c2,p,q) if r not in ps: ps.append(r) if r_ not in ps: ps.append(r_) if s not in ps: ps.append(s) if s_ not in ps: ps.append(s_) # print(ps) cs = ps for i in range(len(cs)): print(long_to_bytes(cs[i]))
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论