zoukankan      html  css  js  c++  java
  • RSA例题一

    首先看题目:

    e=3
    n=22885480907469109159947272333565375109310485067211461543881386718201442106967914852474989176175269612229966461160065872310916096148216253429849921988412342732706875998100337754561586600637594798877898552625378551427864501926224989873772743227733285336042475675299391051376624685754547818835551263597996620383338263448888107691240136257201191331617560711786674975909597833383395574686942099700631002290836152972352041024137872983284691831292216787307841877839674258086005814225532597955826353796634417780156185485054141684249037538570742860026295194559710972266059844824388916869414355952432189722465103299013237588737
    c=15685364647213619014219110070569189770745535885901269792039052046431067708991036961644224230125219358149236447900927116989931929305133870392430610563331490276096858863490412102016758082433435355613099047001069687409209484751075897343335693872741

    题目很直接,直接给了e,n,c,求m;

    首先看到e=3,而且n很大,如果明文很小,导致明文的三次方依旧小于n,那么对密文c直接开三次方就可以得到密文。

    如果e=3,

    那么:,e=3,

    另外还有一种情况:

    就是m的三次方比n大,但是并没有足够大,

    则我们可以设这样一个k满足:

    所以爆破k,如果c-kn能开三次式,那么就可以得到明文。

    代码:

     1 import gmpy2
     2 e = 3
     3 n= 22885480907469109159947272333565375109310485067211461543881386718201442106967914852474989176175269612229966461160065872310916096148216253429849921988412342732706875998100337754561586600637594798877898552625378551427864501926224989873772743227733285336042475675299391051376624685754547818835551263597996620383338263448888107691240136257201191331617560711786674975909597833383395574686942099700631002290836152972352041024137872983284691831292216787307841877839674258086005814225532597955826353796634417780156185485054141684249037538570742860026295194559710972266059844824388916869414355952432189722465103299013237588737
     4 c= 15685364647213619014219110070569189770745535885901269792039052046431067708991036961644224230125219358149236447900927116989931929305133870392430610563331490276096858863490412102016758082433435355613099047001069687409209484751075897343335693872741
     5 print ('n=', n)
     6 print ('c=', c)
     7 print ('[+]Detecting m...')
     8 result = gmpy2.iroot(c, 3)
     9 print ('  [-]The c has cubic root?', result[1])
    10 if result[1]:
    11   print ('  [-]The m is:', '{:x}'.format(result[0]))
    12 print ('[!]All Done!')
    13 # 低加密指数广播攻击

     这时明文m就被我们爆破出来:

    接着用工具将16进制转为ASCII字符就可以得到flag了:

    flag到手,大功告成!

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/dawn-whisper/p/11395678.html
Copyright © 2011-2022 走看看