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到手,大功告成!

原文地址:https://www.cnblogs.com/dawn-whisper/p/11395678.html