bugku rsa
一道关于rsa常规的ctf题目(来自bugku):
链接:https://ctf.bugku.com/files/98e8f374f63ee3ef4818621ceafcb78f/rsa.txt
题目给出了e(公钥)和N(p * q)
可以看到e是一个很大的数,对于这种e很大的数我们一般会采用wiener attack进行破解(wiener attack 是一种对e极大导致d会比较小的情况由wienner发明的一种破译算法)。
在kali的RsaCtftool中集成了这种工具。
可以看到n,e,d,p,q都得到了,这样按照rsa的解密公式就可以得到明文了;
这里我们使用python编写脚本:
#!coding:utf-8
#RSA
import libnum
p = 15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
q = 28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003
n = p * q
e = 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619
c = 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
phi = (p - 1) * (q - 1)
d = libnum.modular.invmod(e, phi)
m = libnum.n2s(pow(c, d, n))
print(m)
这里使用的libnum库是一个python的关于各种数学运算的函数库对于质数生产和因数分解具有很大的优势;
运行脚本: