• 基于轩禹秒杀ctfshow-RSA


    目录

    babyrsa

    easyrsa1

    easyrsa2 

    easyrsa3 

    easyrsa4

    easyrsa5

    easyrsa6


    RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。

    CTF中常见的有:广播攻击、共模攻击、维纳攻击、模不互素

    babyrsa

    导入e p q c 成功计算出了私钥,但是计算明文时报错

    这里我们还需要填入n,n=p*q,用Python计算一下

    导入n后计算明文

    明文转字符

     

    flag{b4by_R5A} 

     也可以用脚本帮助理解原理

    1. import gmpy2
    2. import binascii
    3. e = 65537
    4. p = 104046835712664064779194734974271185635538927889880611929931939711001301561682270177931622974642789920918902563361293345434055764293612446888383912807143394009019803471816448923969637980671221111117965227402429634935481868701166522350570364727873283332371986860194245739423508566783663380619142431820861051179
    5. q = 140171048074107988605773731671018901813928130582422889797732071529733091703843710859282267763783461738242958098610949120354497987945911021170842457552182880133642711307227072133812253341129830416158450499258216967879857581565380890788395068130033931180395926482431150295880926480086317733457392573931410220501
    6. c = 4772758911204771028049020670778336799568778930072841084057809867608022732611295305096052430641881550781141776498904005589873830973301898523644744951545345404578466176725030290421649344936952480254902939417215148205735730754808467351639943474816280980230447097444682489223054499524197909719857300597157406075069204315022703894466226179507627070835428226086509767746759353822302809385047763292891543697277097068406512924796409393289982738071019047393972959228919115821862868057003145401072581115989680686073663259771587445250687060240991265143919857962047718344017741878925867800431556311785625469001771370852474292194
    7. phi = (p-1)*(q-1)
    8. d = gmpy2.invert(e,phi)
    9. m = gmpy2.powmod(c,d,p*q)
    10. print(binascii.unhexlify(hex(m)[2:]))

    跑出 flag{b4by_R5A} 

    easyrsa1

    导入e n c  

    先对n进行分解

    导入p q 计算私钥

    计算明文

    明文转字符,拿到flag

    flag{fact0r_sma11_N} 

    easyrsa2 

    这里存在两个公钥 n并且不互素,我们可以直接对这两个数求最大公因数,从而获得 p和q 

    导入e和c,求解私钥(密文c可以随便用一个)

    解明文,这里也报错 

    用脚本解 

    1. import gmpy2
    2. import binascii
    3. e = 65537
    4. n1 = 23686563925537577753047229040754282953352221724154495390687358877775380147605152455537988563490716943872517593212858326146811511103311865753018329109314623702207073882884251372553225986112006827111351501044972239272200616871716325265416115038890805114829315111950319183189591283821793237999044427887934536835813526748759612963103377803089900662509399569819785571492828112437312659229879806168758843603248823629821851053775458651933952183988482163950039248487270453888288427540305542824179951734412044985364866532124803746008139763081886781361488304666575456680411806505094963425401175510416864929601220556158569443747
    5. c1 = 1627484142237897613944607828268981193911417408064824540711945192035649088104133038147400224070588410335190662682231189997580084680424209495303078061205122848904648319219646588720994019249279863462981015329483724747823991513714172478886306703290044871781158393304147301058706003793357846922086994952763485999282741595204008663847963539422096343391464527068599046946279309037212859931303335507455146001390326550668531665493245293839009832468668390820282664984066399051403227990068032226382222173478078505888238749583237980643698405005689247922901342204142833875409505180847943212126302482358445768662608278731750064815
    6. n2 = 22257605320525584078180889073523223973924192984353847137164605186956629675938929585386392327672065524338176402496414014083816446508860530887742583338880317478862512306633061601510404960095143941320847160562050524072860211772522478494742213643890027443992183362678970426046765630946644339093149139143388752794932806956589884503569175226850419271095336798456238899009883100793515744579945854481430194879360765346236418019384644095257242811629393164402498261066077339304875212250897918420427814000142751282805980632089867108525335488018940091698609890995252413007073725850396076272027183422297684667565712022199054289711
    7. c2 = 2742600695441836559469553702831098375948641915409106976157840377978123912007398753623461112659796209918866985480471911393362797753624479537646802510420415039461832118018849030580675249817576926858363541683135777239322002741820145944286109172066259843766755795255913189902403644721138554935991439893850589677849639263080528599197595705927535430942463184891689410078059090474682694886420022230657661157993875931600932763824618773420077273617106297660195179922018875399174346863404710420166497017196424586116535915712965147141775026549870636328195690774259990189286665844641289108474834973710730426105047318959307995062
    8. p = gmpy2.gcd(n1,n2)
    9. q = n1 // p
    10. phi = (p-1)*(q-1)
    11. d = gmpy2.invert(e,phi)
    12. m = gmpy2.powmod(c1,d,n1)
    13. print(binascii.unhexlify(hex(m)[2:]))

    运行得到 flag{m0_bv_hv_sv} 

    easyrsa3 

    导入e1,e2,n1,n2,c1,c2

    进行公共模攻击(注意两个n是一样的,只输入一次否则会报错)

    明文转字符 

     flag{sh4r3_N}

    easyrsa4

    这里e很小,应该是小指数攻击 

    导入之后进行小指数攻击 ,将明文转字符即可

    flag{Sm4ll_eee} 

    easyrsa5

    导入e,n,c 并进行维纳攻击

    明文转字符得到flag 

    flag{very_biiiiig_e}

    easyrsa6

    先将n分解

    这五个数都是素数,也叫费马数,前面我们已经进行了费马分解

    这里我们导入 e 为65537,并且导入密文c,导入分解后的p和q

    便可计算出私钥

    继续计算明文

    将明文转为字符

     flag{p&q_4re_t00_c1o5ed} 

  • 相关阅读:
    【软件测试】开发/测试模型
    2095. 删除链表的中间节点、19. 删除链表的倒数第 N 个结点、148. 排序链表
    可变参数模板 Variadic Templates
    我的AIGC部署实践03
    Android 车载应用开发指南 - CAN Bus 协议详解
    footer页面布局
    加固平板电脑在无人机的应用|亿道三防onerugged
    GaussDB(DWS)基于Flink的实时数仓构建
    SwiftUI Swift CoreData 计算某实体某属性总和
    HarmonyOS应用开发-视频播放器与弹窗
  • 原文地址:https://blog.csdn.net/Myon5/article/details/133786706