BUUCTF_Crypto_Dangerous RSA

题目:给了一个文件

用txt文本打开

 

 从字面上就可以知道这是一个危险的加密,由于e=3,攻击者可以很容易的解开

当e=3时:

情况一,当m的e次方小于n时,m^emodn=c,这个时候m^e=c,直接对c开三次方得到m

情况二,当m的e次方大于n时,m^e=k*n+c,由于e比较小,可以直接爆破将k求出来,在开e次方解出m(求出当k满足k*n+c能够被开e次方根时)

方法一:

直接开方:

import gmpy2
import libnum
n=0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793
e=0x3
c=0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365
n=int(n)
c=int(c)
m=gmpy2.iroot(int(c),3)
m2=13040004482819713819817340524563023159919305047824600478799740488797710355579494486728991357
print(libnum.n2s(m2))

(由于gmpy2.iroot()的返回值是这个

(mpz(1013490999291107792177153466361805236241416288817078687311931724463214489794108438975329011563341967086989437L), True)

所以我走了两边程序)

得到flag

方法二:

爆破求k

import gmpy2
import libnum
c=388982143888913566432952899826435392441858422012474418115554896677409312904369689532731213565894852383492256145502964385553788742668687031164573906300895459775220943136552401216451862200841942583444538908982200072193240856135729470918596634612711419824662550437824107515342351230372078513370978292361156537349448203629
n=604679512138617037843063400335852277917759302720680757801819343322169177317789639211717686519352704962708383679383874632838218844139645603288642990840752333972443512630475955756086004231475765696973696131487596242445439165181095216174429784632070450967063006140391578931127355859533792899253464689363815381795168313503
k=0
def dec(c,N):
    k=0
    while 1:
        (x,y)=gmpy2.iroot(c+k*N,3)
        if y:
            print(gmpy2.iroot(c+k*N,3))
            break
        k=k+1
    print(k)
dec(c,n)
m=1013490999291107792177153466361805236241416288817078687311931724463214489794108438975329011563341967086989437
print(libnum.n2s(m))

(同上)

得到flag

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值