BUU-crypto-刷题记录20

[RoarCTF2019]RSA

题目

A=(((y%x)**5)%(x%y))**2019+y**316+(y+1)/x
p=next_prime(z*x*y)
q=next_prime(z)
A =  2683349182678714524247469512793476009861014781004924905484127480308161377768192868061561886577048646432382128960881487463427414176114486885830693959404989743229103516924432512724195654425703453612710310587164417035878308390676612592848750287387318129424195208623440294647817367740878211949147526287091298307480502897462279102572556822231669438279317474828479089719046386411971105448723910594710418093977044179949800373224354729179833393219827789389078869290217569511230868967647963089430594258815146362187250855166897553056073744582946148472068334167445499314471518357535261186318756327890016183228412253724
n =  117930806043507374325982291823027285148807239117987369609583515353889814856088099671454394340816761242974462268435911765045576377767711593100416932019831889059333166946263184861287975722954992219766493089630810876984781113645362450398009234556085330943125568377741065242183073882558834603430862598066786475299918395341014877416901185392905676043795425126968745185649565106322336954427505104906770493155723995382318346714944184577894150229037758434597242564815299174950147754426950251419204917376517360505024549691723683358170823416757973059354784142601436519500811159036795034676360028928301979780528294114933347127
c =  41971850275428383625653350824107291609587853887037624239544762751558838294718672159979929266922528917912189124713273673948051464226519605803745171340724343705832198554680196798623263806617998072496026019940476324971696928551159371970207365741517064295956376809297272541800647747 885170905737868568000101029143923792003486793278197051326716680212726111099439262589341050943913401067673851885114314709706016622157285023272496793595281054074260451116213815934843317894898883215362289599366101018081513215120728297131352439066930452281829446586562062242527329672575620261776042653626411730955819001674118193293313612128

解题

已知n、c
将n分解得到:

p = 842868045681390934539739959201847552284980179958879667933078453950968566151662147267006293571765463137270594151138695778986165111380428806545593588078365331313084230014618714412959584843421586674162688321942889369912392031882620994944241987153078156389470370195514285850736541078623854327959382156753458569
q = 139916095583110895133596833227506693679306709873174024876891023355860781981175916446323044732913066880786918629089023499311703408489151181886568535621008644997971982182426706592551291084007983387911006261442519635405457077292515085160744169867410973960652081452455371451222265819051559818441257438021073941183

e未知,需要爆破一下(e最小为2)

注意,[RoarCTF2019]的默认flag形式为RoarCTF{***}

import sympy
from gmpy2 import *
from Crypto.Util.number import long_to_bytes

#记得导入数据

phi=(p-1)*(q-1)
flag="RoarCTF{"

e = 2
while(e<100000):
    e = next_prime(e)
    d = invert(e,phi)
    m = pow(c,d,n)
    s = str(long_to_bytes(m))
    if flag in s:
        print(s)
        break

出现错误

ZeroDivisionError: invert() no inverse exists

对出错语句加上异常处理:

while(e<100000):
    e = next_prime(e)
    try:
        d = invert(e,phi)
    except:
        continue
    else:
        m = pow(c,d,n)
        s = str(long_to_bytes(m))
        if flag in s:
            print(s)
            break

运行得到

b'RoarCTF{wm-l1l1ll1l1l1l111ll}'

答案
flag{wm-l1l1ll1l1l1l111ll}

救世捷径

题目

一个名叫CPU的神秘大陆有26个国家,有些国家之间会有一条无向路,每条路径都有不同的长度和一段神秘代码,救世主尼奥要从国家1出发,赶往国家26拯救大陆,请你帮助救世主选择最短路径,而走过的路的神秘代码连接起来便是flag。 以下是数行数据,每行第一个,第二个数字代表这条路的两个端点国家,第三个数字代表路途长度,最后一个字符串便是神秘代码。路在附件中~ 帮助救世主尼奥吧,他快被吓尿了。。。

1 2 100 FLAG{
2 3 87 AFQWE
2 4 57 ETKLS
2 5 50 WEIVK
2 6 51 AWEIW
3 7 94 QIECJF
3 8 78 QSXKE
3 9 85 QWEIH
4 13 54 WQOJF
4 14 47 KDNVE
4 15 98 QISNV
5 10 43 AEWJV
5 11 32 QWKXF
5 12 44 ASJVL
6 16 59 ASJXJ
6 17 92 QJXNV
6 18 39 SCJJF
6 23 99 SJVHF
7 19 99 WJCNF
8 20 96 SKCNG
9 20 86 SJXHF
10 21 60 SJJCH
11 21 57 SJHGG
12 22 47 SJCHF
14 10 55 EJFHG
16 17 59 ASJVH
18 12 53 SJFHG
18 24 93 SHFVG
21 22 33 SJFHB
19 25 88 ASHHF
20 25 96 SJVHG
22 25 23 SJVHJ
25 26 75 SDEV}

解题
本来想写代码的,发现还不如直接算容易

倒着来,最后字符为SDEV}

到25,有三条路19–>25;20–>25;22–>25

在往回追溯,1–>2–>3–>7–>19–>25,总路程543
1–>2–>3–>8–>20–>25,总路程532
1–>2–>3–>9–>20–>25,总路程529
1–>2–>5–>12–>22–>25,总路程362

肯定最后一个最短了FLAG{WEIVKASJVLSJCHFSJVHJSDEV}
答案
flag{WEIVKASJVLSJCHFSJVHJSDEV}

[网鼎杯 2020 青龙组]boom

题目
在这里插入图片描述
解题
Play a simple game

first:this string md5:46e5efe6165a5afb361217446a2dbd01

MD5解密得到:en5oy

Great next level

This time:Here are have some formulas
3x-y+z=185
2x+3y-z=321
x+y+z=173
input: x =
input: y =
input: z =

解方程?

for x in range(400):
    for y in range(400):
        for z in range(400):
            if 3*x-y+z==185:
                if 2*x+3*y-z==321:
                    if x+y+z==173:
                        print(x)
                        print(y)
                        print(z)
                        break

x=74,y=68,z=31

Last time: Kill it
x*x+x-7943722218936282=0
input x:

for x in range(7943722218936282):
    if x*x+x==7943722218936282:
        print(x)
        break

89127561

输入,然后,,,关闭了😦

搜了下,别的师傅有用OD调试的,菜菜OD还没下载,所以选择了另一种方式,用cmd打开,

再运行一遍

Great This is your FLAG
flag{en5oy_746831_89127561}

答案
flag{en5oy_746831_89127561}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值