当前位置: 代码迷 >> 综合 >> BUUCTF_Crypto_[WUSTCTF2020]B@se
  详细解决方案

BUUCTF_Crypto_[WUSTCTF2020]B@se

热度:14   发布时间:2023-12-02 16:01:02.0

给了一个txt文件:

从题目可以看出是与base64相关,不难发现是base64的变种,将base64的顺序改变了,但还有4个字符不知道

可以写python脚本得到缺失的4个字符

代码如下:

import string
s = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'
j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for i in j:if i not in s:print(i),

结果如下:

可以知道缺少这4个,但不知道顺序,可以通过代码整出24种不同的base64变种的排序

代码如下:

t=[]
for i in itertools.permutations('ju34',4):t.append(''.join(i))

 在通过python脚本得到24种不同的解码

通过base64的原理将密文按照base64变种的排序变成6位的二进制数再按每八个数切分,再通过二进制数转换成字符串得到解码,这里用的是libnum库里的b2s

具体代码如下:

import string
import gmpy2
import libnum
import base64
import itertools
def cut(obj,sec):return([obj[i:i+sec] for i in range(0,len(obj),sec)])
t=[]
for i in itertools.permutations('ju34',4):t.append(''.join(i))
c = 'MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD'
b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
a=""
d=''
for g in t:s = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs'+g+'kxyz012789+/'for i in c:for j in range (64):if i == s[j]:a=a+'{:06b}'.format(j)            a=a+'00'a=cut(a,8)for i in range (38):d = d + libnum.b2s(a[i])a=''print(d)d=''

得到24个不同的解码

找出最像flag的解码

得到flag