BUUCTF Crypto 8

rsa攻击的三种方式

rsa2

令人头大的rsa
这道题看到e非常大,猜测rsa低解密指数攻击
用了脚本https://github.com/pablocelayes/rsa-wiener-attack
解是解出来了,提交不正确,我也不知道是步骤还是那块出问题了,方法先记录一下。

import  RSAwienerHacker
import hashlib
N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471
e = 46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085
d =  RSAwienerHacker.hack_RSA(e,N)
if d:
    print(d)

flag = "flag{" + hashlib.md5(hex(d).encode("utf-8")).hexdigest() + "}"
print(flag)

Dangerous RSA

看到题目中e=3非常小,且c比n小,明显低加密指数攻击,处理一下数据,直接上脚本

import gmpy2 
import libnum
import time 
n=167301374477410718629594349645281326914434089992530877687003211679782894661758575488565941682050432268001204338578075919668073694767856492057865133587390911825807060433946917820651370344053528328094902693603505568585118920750295647737371418701653965110274085034584682022391405126061404348676703127840773433213906071664938863708646689806198452683548410312536652311486232204374119918052665188194284082981993123933019126250635236195620505623310226819070724330540988059137297320456628211063635075781377794363289036742972802441829857821669593841667056844922354061345810344570226493725115159881741439056901709252614302103855
e=3
c=2217344750798296091193230394221582894657909643174934416842588335871298152598368701484028832407289746218387783855373449002121088413603751014125921242419602155087438902181522441026460003722677539409576093794862185483713606547386172606576925933695952279401957552813065318376293
i = 0
s = time.clock()
while 1:
     m, b = gmpy2.iroot(c+i*n, e)
     if b:
        print('[-]m is:', m)
        print (libnum.n2s(m))
        print('[!]Timer:', round(time.clock()-s, 2), 's') 
        break
     i+=1

运行即得

SameMod

看到题就想到共模攻击,上脚本解m

import gmpy2
import libnum
n=6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249
e1=773
e2=839
c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535
s0, s1, s2 = gmpy2.gcdext(e1, e2)
if s1 < 0:
    s1 = -s1
    c1 = gmpy2.invert(c1, n)
elif s2 < 0:
    s2 = -s2
    c2 = gmpy2.invert(c2, n)
m = gmpy2.powmod(c1, s1, n)*gmpy2.powmod(c2, s2, n) % n
print('[-]m is:', m)

我直接解m解不出来。。
后来发现前三位是102对应f,往后推了几位发现正好是flag,所以用ascii表对应出flag。

你可能感兴趣的:(BUUCTF Crypto 8)