BUUCTF crypto做题记录(6)新手向

一、Unencode

得到的密文:89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

看题目名字,我们可以知道这是一个解码的题目,但是unencode 好像是不可解码的意思,我们可以对照着解码方式看一下哪个更适合,可以进行尝试一下CTF必备技能之编码大全-腾讯云开发者社区-腾讯云 (tencent.com)

可以对照着其中的编码方式看一下,找出对应的解码方式,可以找到这是uuencode

二、[AFCTF2018]Morse

得到摩丝密文为:

进行解密Morse Code (rumkin.com)

得到61666374667B317327745F73305F333435797D

上交之后不是答案,可能还需要进一步解码,很可能就是ASCII编码,同时里面含有字母,那么应该是要按16进制读取。

s='61666374667B317327745F73305F333435797D'
print(len(s))
for i in range(0,len(s),2):
	x=s[i:i+2]
	#print(x)
	x=int(x,16)
	print(chr(x),end='')

就可以得到答案:afctf{1s't_s0_345y},但是要换成flag{}上交。

三、还原大师

这个题目没有很多信息,直接爆破,涉及的字符串是大写字母和数字。

import requests
from hashlib import md5
m='TASC?O3RJMV?WDJKX?ZM'
x1=[i for i in range(48,59)]
x2=[j for j in range(65,91)]
x=x1+x2
for k1 in x:
    for k2 in x:
        for k3 in x:
            m='TASC'+chr(k1)+'O3RJMV'+chr(k2)+'WDJKX'+chr(k3)+'ZM'
            
            md5_url = md5(m.encode('utf8')).hexdigest()
            if 'e903' in md5_url and '4dab' in md5_url and '8a' in md5_url and '08' in md5_url and '51' in md5_url and '8a' in md5_url:
                print(md5_url)
                print(m)

之后把小写字符换成大写字母,上交就行。flag{E9032994DAB AC08080091151380478A2}

四、异性相吸

 这个题目是没有什么思路的,不知道该怎么下手,参考了一下BUUCTF——异性相吸 题解_asadsasdasdasdasdasdasdasdasdasdqwesqf-CSDN博客

这篇文章中提到的一个思路是将异性与01关联起来,将密文和明文转成二进制进行异或就可以得到二进制的明文,再将其转化明文就是答案

首先,先将密文和明文翻译成二进制,编程时将注意将空格去除,翻译时每八位加上空格汉字二进制转换器,字符与2-36进制相互转换 - 千千秀字 (qqxiuzi.cn)

字符串二进制转换 (lddgo.net)

a = '0010000000011111001000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011'
b = '01100001 01110011 01100001 01100100 01110011 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01110001 01110111 01100101 01110011 01110001 01100110'
b=b.replace(' ','' )
print(len(a),len(b))
c = ''
count=0
for i in range(len(a)):
    if a[i] == b[i]:
        c += '0'
    else:
        c += '1'
print(c)

用flag替换后上交即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值