目录
[NPUCTF2020]这是什么觅🐎
用记事本打开所给文件,发现一堆乱码,再用010打开:
ZIP Archive (zip),文件头:504B0304,故在文件后头加上后缀.zip,然后解压得到图片:
首字母代表星期几的英文首字母缩写,其中,S1是星期六,S2是星期日。下一个数字代表的是第几行,根据此规律,得到:3 1 12 5 14 4 1 18,对照字母表得到英文单词:calendar
浪里淘沙
猜测是统计词频,利用word进行统计
即可
yxx
密码学中的一种 加密算法 ,一次性密码本OTP(One-time Pad):密钥长度和密文长度相同,一个密钥只能用于加密一个密文。
加密过程:
来自 百度百科
题目:
用010打开密文,发现是32位,与明文 一样长,
故此题是一次性密码本OTP型,将明文与密文的txt每一位对应异或即可得到flag,利用脚本:
c = ['0A','03','17','02','56','01','15','11','0A','14','0E','0A','1E','30','0E','0A','1E','30','0E','0A','1E','30','14','0C','19','0D','1F','10','0E','06','03','18']
m = ['l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e','l','o','v','e']
for i in range(32):
c[i] = int(c[i],16)
print(c)
flag = ""
for i in range(32):
flag += chr(c[i]^ord(m[i]))
print(flag)
[AFCTF2018]Vigenère
看题目名字知道是维吉尼亚密码,用在线网站爆破得flag:
[网鼎杯 2020 青龙组]boom
输入得到的结果:
解出x = 74、y = 68、z = 31:
解出x = 89127561,输入后直接消失了,看了大佬们的wp,知道一条可行的路:用cmd直接运行boom.exe,然后把答案在输入一遍,就有了flag
[ACTF新生赛2020]crypto-classic0
题目:
还给了一个加密的压缩包,提示密码是生日格式,故采用暴力破解,从19000000开始,得到密码
得到里面的加密代码:
故只需反过来再次加密即可得到flag:
c = 'Ygvdmq[lYate[elghqvakl}'
res = ''
for i in range(len(c)):
flag = ord(c[i]) ^ 0x7
flag += 3
res += chr(flag)
print(res)
[WUSTCTF2020]B@se
根据题目以及给的密文,可以猜测是base64的变体,可能在原基础上进行了换位,所以要找出缺失的4位,然后进行爆破求解flag,看了大佬的wp:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
''''
密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD==
JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/
oh holy shit, something is missing...
'''
import itertools
def My_base64_decode(inputs,s):
bin_str = []
for i in inputs:
if i != '=':
x = str ( bin ( s.index ( i ) ) ).replace ( '0b', '' )
bin_str.append ( '{:0>6}'.format ( x ) )
outputs = ""
nums = inputs.count ( '=' )
while bin_str:
temp_list = bin_str[:4]
temp_str = "".join ( temp_list )
# print(temp_str)
if (len ( temp_str ) % 8 != 0):
temp_str = temp_str[0:-1 * nums * 2]
for i in range ( 0, int ( len ( temp_str ) / 8 ) ):
outputs += chr ( int ( temp_str[i * 8:(i + 1) * 8], 2 ) )
bin_str = bin_str[4:]
return outputs
cipher='MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD=='
s1 ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
s='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'
#查找缺少字符
missstr=''
for i in s1:
if i not in s:
missstr+=i
#print(missstr)
# ju34
#列出缺少字符可能的排列组合
missstrs=[]
for i in itertools.permutations(missstr, 4):
missstrs.append(''.join(i))
print(missstrs)
#列出可能的flag
for i in missstrs:
s='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs'+i+'kxyz012789+/'
flag=My_base64_decode(cipher,s)
print(flag)
找到正确的flag:
鸡藕椒盐味
先使用海明校验码得到110110100000,再用md5加密得到flag
[AFCTF2018]Single
题目:
无规律替换加密 ,借助在线网站进行词频分析即可得到flag:https://quipqiup.com/