2021羊城杯 Rsa?题解

 

 

yafu分解n很快就可以得到p,q但是没什么用

仔细观察getloop可以找到像杨辉三角类似的结构

其中x1是其中的奇数项和,y1是其中的偶数项和

实际上最后得到的x1和y1满足

((X+aY)^65536)mod n=(s1 + a*s2)mod n

随后根据a = ((inv_Z1-X)*inv_Y)%n ,得知(s1 + a*s2)mod n就是inv Z1

随后算出Z1,得到X

最后Y =(n+x_add_ay-X)*gmpy2.invert(a,n)%n得到flag

import os
from Crypto.Util.number import *
s1 = 5404548088049249951619519701935576492239293254135836357417714329205323074367876875480850741613547220698045360461761929952847796420174204143917852624050110
s2 = 2110372753170830610718226848526649992911771424441223687775304654852191999130502986109306355582366065947895295520226816523397652918227241733632791793362785
a = 1762039418842677123086894939949574689744108610561557889235294034870342076452734215004689409493802437034960516295735815195656138656970901855976802991519141
p = 115718235064789220654263009993128325569382592506655305434488398268608329541037
q = 115718235064789220654263009993128324769382192706654302434478391267607309966379
n = 13390709926509813526471364597371124446888078365567927211781799241724742352679484983709219580483800891886832613684875066109177882219522305348565532970795023
N = (p-1)*(q-1)
e = 65537

s = (s1+a*s2)%n
d = gmpy2.invert(e,N)
x_add_ay = pow(s,d,n)
print(x_add_ay)
inv_Z1=x_add_ay
Z1 = gmpy2.invert(inv_Z1,n)
inv_2 = gmpy2.invert(2,n)
X = ((Z1+inv_Z1)*inv_2)%n
print(X)
Y =(n+x_add_ay-X)*gmpy2.invert(a,n)%n
print(long_to_bytes(Y))

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值