[SWPU 2020]happy-做题笔记

下载拿到附件:

题目
('c=', '0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9eL')
('e=', '0x872a335')
#q + q*p^3 =1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586
# qp + q *p^2 = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594

认识RSA:

带你彻底理解RSA算法原理_rsa工作原理-CSDN博客

求p,q的思路

求p,q

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

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

q*(1+p)=gmpy2.gcd(n1,n2)

p=n2//gmpy2.gcd(n1,n2)      p=n2//q*(1+p)
q=gmpy2.gcd(n1,n2)//(1+p)   q=q*(1+p)//(1+p)
print("p =",p)
print("q =",q)
#p = 1158310153629932205401500375817
#q = 827089796345539312201480770649

EXP:

from Crypto.Util.number import *
from gmpy2 import *

c=0x7a7e031f14f6b6c3292d11a41161d2491ce8bcdc67ef1baa9e
e=0x872a335
#q + q*p^3 =1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586
#qp + q *p^2 = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594

n1 = 1285367317452089980789441829580397855321901891350429414413655782431779727560841427444135440068248152908241981758331600586
n2 = 1109691832903289208389283296592510864729403914873734836011311325874120780079555500202475594

gift = gcd(n1,n2) # 求最大公约数

p = n2//gift
q = gift // (p+1)
n= p*q
phi = (p-1)*(q-1)

d = invert(e, phi) # 计算模逆元,即找到一个整数z,使得x * z % y == 1。

flag = pow(c, d, n)
print(long_to_bytes(flag))

解释:

d=invert(e,phi)这是求私钥d,d满足以下条件

1 < d <phi
e*d mod phi = 1

flag:

flag{happy_rsa_1}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值