[SWPU 2020]happy

已知c,e,目标是求p,q然后求出n,带入脚本即可

#k1=q + q*p^3 =1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586
#k2=qp + q *p^2 = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594

由上可知

q + q*p^3=q(1+p)(p^2-p+1)

qp + q *p^2=qp(1+p)

求两者最大公因式k3=q(1+p),则p=k2/k3,q=k3/(1+p),则n=p*q,带入脚本可得flag{happy_rsa_1}

from gmpy2 import *
from Crypto.Util.number import *
c=0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9e
e=0x872a335
k1=1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586
k2= 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594
k3=gcd(k1,k2)
p=k2//k3
q=k3//(1+p)
n=p*q
phi=(p-1)*(q-1)
d=invert(e,phi)
flag=pow(c,d,n)
m=long_to_bytes(flag)
print(m)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值