BUUCTF——CRYPTO(记录不熟悉的题)(3)

本文详细介绍了多个CTF挑战的解决过程,涉及内容包括ZIP文件解压、图片隐藏信息、词频统计、一次性密码本 OTP 加密、维吉尼亚密码、Base64 变体解码、海明校验码与MD5加密等。通过实例展示了密码学和编码在网络安全竞赛中的应用。
摘要由CSDN通过智能技术生成

目录

[NPUCTF2020]这是什么觅🐎

浪里淘沙

yxx

[AFCTF2018]Vigenère

 [网鼎杯 2020 青龙组]boom 

 [ACTF新生赛2020]crypto-classic0

[WUSTCTF2020]B@se

鸡藕椒盐味 

[AFCTF2018]Single 


[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/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值