从0到1的CTF之旅————Crypto(3)

————————————————————————————————————————————

单位断网了,抱着我的小笔记本瑟瑟发抖,这么久还不给配电脑确实niu啊
————————————————————————————————————————————

第二十一题:RSA1(题目如图)

在这里插入图片描述
给出代码如下:

import gmpy2
def decrypt(dp,dq,p,q,c):
    InvQ = gmpy2.invert(q, p)
    mp = pow(c, dp, p)
    mq = pow(c, dq, q)
    m = (((mp-mq)*InvQ) % p)*q+mq
    print(m)
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
decrypt(dp,dq,p,q,c)

这里面计算出来是一个数字串,然后再使用libnum函数将其转化为字符串,如下:

import libnum
n = 11630208090204506176302961171539022042721137807911818876637821759101
print(libnum.n2s(n))

其实这两个可以写一起,但是总是报一个当前长度仅适用于int格式的错误,算了,就分开写得了,可以得到最后结果为noxCTF{W31c0m3_70_Ch1n470wn},将前面修改为flag,提交成功!

————————————————————————————————————————————

第二十二题:权限获得第一步(题目如图)

在这里插入图片描述跟上次那题一个套路,直接丢MD5在线解码,得到flag,提交成功!

————————————————————————————————————————————

第二十三题:old-fashion(题目如图)

在这里插入图片描述一大串稀奇古怪的单词,像是某种加密通话,看到这种很长很长又一句看不懂的,八成是替换加密,直接丢到上次给出的quipqiup上,破解成功,提交显示成功!

在这里插入图片描述
————————————————————————————————————————————

第二十四题:世上无难事(题目如图)

在这里插入图片描述又长又臭,直接猜是替换加密,丢进quip里面解一下。
在这里插入图片描述
就这玩意,直接用工具小写转换,提交显示成功!

————————————————————————————————————————————

第二十五题:RSA3(题目如图)

在这里插入图片描述已知c1,c2,e1,e2和n,典型的共模攻击,代码如下:

import libnum

c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1 = 11187289
c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2 = 9647291

# s1=gmpy2.invert(e1,e2)
# s2=gmpy2.invert(e2,e1)
r, s1, s2 = gmpy2.gcdext(e1, e2)
m = (pow(c1, s1, n) * pow(c2, s2, n)) % n
print(hex(m))
print(libnum.n2s(int(m)))

解出即为flag,提交成功!(RSA对于初学者来说越来越难了,到后面很难搞懂,基本都是在网上借鉴的别人的代码,,,)

————————————————————————————————————————————

第二十六题:RSA2(题目如图)
在这里插入图片描述给出的e,n,dp,c,所以还是要先求出d,再根据d求m。
下面给出代码:

import gmpy2 as gp
e = 65537
n = gp.mpz(248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113)
dp = gp.mpz(905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657)
c = gp.mpz(140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751)
for x in range(1, e):
    if(e*dp%x==1):
        p=(e*dp-1)//x+1
        if(n%p!=0):
            continue
        q=n//p
        phin=(p-1)*(q-1)
        d=gp.invert(e, phin)
        m=gp.powmod(c, d, n)
        if(len(hex(m)[2:])%2==1):
            continue
        print('--------------')
        print(m)
        print(hex(m)[2:])
        print(bytes.fromhex(hex(m)[2:]))

解出即为flag,提交成功!

————————————————————————————————————————————

第二十七题:Unencode(题目如图)

在这里插入图片描述
直接在工具库里面在线解密,得到flag提交即可。
在这里插入图片描述

————————————————————————————————————————————

第二十八题:[AFCTF2018]Morse(题目如图)

在这里插入图片描述直接摩斯在线解密,得到一串字符。
在这里插入图片描述
先提交试一下,发现不行,感觉是一个base加密,先试一下base16。
在这里插入图片描述
把前面修改成flag提交就可以了,提交成功!

————————————————————————————————————————————

第二十九题:异性相吸(题目如图)

在这里插入图片描述第一次见到这种题目,不知道如何操作,想不出来没办法了,先去百度上看看别人的解法。

明白方法大概是先转化为二进制再进行异或操作,看到大佬们都用代码解决的,作为小白我想的是能避免就尽量避免吧。

先在线转化为二进制,然后再异或操作,发现还是有问题,看别人大佬说是文本的内容复制出来有问题,这没办法了,只有用with open直接读里面内容了,写代码无可避免了。
下面给出代码:(这一段来自大佬的解答https://blog.csdn.net/weixin_52446095/article/details/115464659

key = 'asadsasdasdasdasdasdasdasdasdasdqwesqf'
with open(r'F:\A——CTF专用下载文件夹\b8c1caee-43d6-42ee-aecc-d72502a5ade2\密文.txt', 'r') as f:
    m = f.read()

c = ''
for i in range(len(key)):
    c += chr(ord(m[i]) ^ ord(key[i]))
print(c)

————————————————————————————————————————————

第三十题:还原大师(题目如图)

在这里插入图片描述
这题在单位系统内部的CTF平台上也碰到过,基本原理是一模一样的,需要使用hashlib函数,具体代码如下:

import hashlib
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode("utf8"))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)

得到的结果转化为大写,提交成功!

————————————————————————————————————————————

困难题简单题交杂在一起,这次的题目还是很有收获的,下一篇开始更新misc,因为马上要比赛了,还是要各种题型雨露均沾,都热热手练习一下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值