攻防世界crypto高手题之RSA_gcd

51 篇文章 8 订阅

攻防世界crypto高手题之RSA_gcd

在这里插入图片描述
.
.
最近由于在备考,所以有一段时间没刷题了,当然现在也在备考。只是在摸鱼而已。
.
.
首先看看题目暗示 GCD 是最大公约数的意思,根据笔记猜想是给了多个模 n,且都是 2048bit 4096bit 等无法正面分解的数,需要使用欧几里得算法求取模之间的公约数。
.
.
那么照例下载附件,两个TXT,的确是多个模 N:
在这里插入图片描述

在这里插入图片描述
.
.
这个题目类型对应 CTF-RSA-tool工具 的一个例子:
在这里插入图片描述
.
.
那么照例摆放整齐,看看能不能直接用脚本跑出:
在这里插入图片描述
在这里插入图片描述
.
.
说是格式错了,单独求解排查一下,发现单个又能解出来喔:(直接给我整不会了,一个N都能求,那还用什么共因子啊,搞得我都不知道哪里错了,感觉是不用公因子就不要摆成求公因子的格式吧。)
在这里插入图片描述
在这里插入图片描述
.
.
提交完 flag 之后自己写一个脚本出来,这里两个 N,两个 C。一开始还不知道是一个 N 加密出一个 C 还是 N1 加密的 C1 再加密出 C2,毕竟以前做过这种多层加密的题。

想了一下感觉是第一种,那就附上脚本开搞:(参照的是以前做过的2021年9月广州羊城杯,CRYPTO的BigRsa

import gmpy2
def share_factor(n1, n2, e, c1,c2):
    p1 = gmpy2.gcd(n1, n2)
    q1 = n1 / p1
    q2 = n2 / p1
    d1 = gmpy2.invert(e, (p1 - 1) * (q1 - 1))
    plain = gmpy2.powmod(c1, d1, n1)
    d2 = gmpy2.invert(e, (p1 - 1) * (q2 - 1))
    plain2 = gmpy2.powmod(c2, d2, n2)
    plain = hex(plain)[2:]+hex(plain2)[2:]		#由于hex之后是字符串,所以可以直接用+来拼接。但是如果在前面用plain+plain2的话由于数字相加就乱码了。
    if len(plain) % 2 != 0:
        plain = '0' + plain
    print('Here are your plain text: \n' + plain.decode('hex'))
if __name__ == "__main__":
    n1 = 23220619839642624127208804329329079289273497927351564011985292026254914394833691542552890810511751239656361686073628273309390314881604580204429708461587512500636158161303419916259271078173864800267063540526943181173708108324471815782985626723198144643256432774984884880698594364583949485749575467318173034467846143380574145455195152793742611717169602237969286580028662721065495380192815175057945420182742366791661416822623915523868590710387635935179876275147056396018527260488459333051132720558953142984038635223793992651637708150494964785475065404568844039983381403909341302098773533325080910057845573898984314246089
    n2 = 22642739016943309717184794898017950186520467348317322177556419830195164079827782890660385734113396507640392461790899249329899658620250506845740531699023854206947331021605746078358967885852989786535093914459120629747240179425838485974008209140597947135295304382318570454491064938082423309363452665886141604328435366646426917928023608108470382196753292656828513681562077468846105122812084765257799070754405638149508107463233633350462138751758913036373169668828888213323429656344812014480962916088695910177763839393954730732312224100718431146133548897031060554005592930347226526561939922660855047026581292571487960929911
    e = 65537
    c1 = 9700614748413503291260966231863562117502096284616216707445276355274869086619796527618473213422509996843430296526594113572675840559345077344419098900818709577642324900405582499683604786981144099878021784567540654040833912063141709913653416394888766281465200682852378794478801329251224801006820925858507273130504236563822120838520746270280731121442839412258397191963036040553539697846535038841541209050503061001070909725806574230090246041891486506980939294245537252610944799573920844235221096956391095716111629998594075762507345430945523492775915790828078000453705320783486744734994213028476446922815870053311973844961
    c2 = 20513108670823938405207629835395350087127287494963553421797351726233221750526355985253069487753150978011340115173042210284965521215128799369083065796356395285905154260709263197195828765397189267866348946188652752076472172155755940282615212228370367042435203584159326078238921502151083768908742480756781277358357734545694917591921150127540286087770229112383605858821811640935475859936319249757754722093551370392083736485637225052738864742947137890363135709796410008845576985297696922681043649916650599349320818901512835007050425460872675857974069927846620905981374869166202896905600343223640296138423898703137236463508
    share_factor(n1, n2, e, c1,c2)

.
.
结果:(python2运行)
在这里插入图片描述
.
.
.
解毕!
敬礼!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐一 · 林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值