simple10

这题pyc,网站直接解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import string
letters = list(string.ascii_letters) + list(string.digits) + ['+', '/']
print(letters)
dec = 'FcjT CgD1 EffE m2rP C3bT yL5W u2bK BI9K AZrw FgrU ygHN' #对比数据

def encode(shuru):
str_ascii_list = [ ('{:0>8}').format(str(bin(ord(i))).replace('0b', '')) for i in shuru ]
#{:0>8}为数字补零,填充左边,总宽度为8,replace去掉换成二进制之后的0b
output_str = '' #预备
equal_num = 0
while str_ascii_list:
temp_list = str_ascii_list[:3]#切片3之前的
if len(temp_list) != 3: #如果temp长不为3
while len(temp_list) < 3:
equal_num += 1 #equal+1
temp_list += ['00000000']

temp_str = ('').join(temp_list)
print(temp_str)
temp_str_list = [ temp_str[x:x + 6] for x in [0,6,12,18]]#按顺序取 0,6| 6,12|,12,18|,18,24 ,相当于分割成6位
print(temp_str_list)
temp_str_list = [ int(x, 2) for x in temp_str_list ]#二进制形式的x,化成整数
print(temp_str_list)
if equal_num:#大于3的时候不触发
temp_str_list = temp_str_list[0:4 - equal_num]
print(letters[x] for x in temp_str_list )
output_str += ('').join([ letters[x] for x in temp_str_list ])
print(output_str)
str_ascii_list = str_ascii_list[3:] #反复到没得切

output_str = output_str + '=' * equal_num
print(output_str)
return output_str

print( "Now let's start the origin of Python!\n")
print( 'Plz Input Your Flag:\n')
enc =input()
lst = list(enc)#list化

lst.reverse()#反转输入

llen = len(lst)
for i in range(llen):
if i % 2 == 0: #偶数位与奇数位分开处理
lst[i] = chr(ord(lst[i]) - 2) #变成偶数加一位
lst[i] = chr(ord(lst[i]) + 1)

enc2 = ''
enc2 = enc2.join(lst)
enc3 = encode(enc2) #加密
if enc3 == dec:
print( "You're right! ")
else:
print( "You're Wrong! ")

有点长,仔细看看

本来想for i in range(32,127) 直接爆破的,不过这里的加密有加长

解密捏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import string
letters = list(string.ascii_letters) + list(string.digits) + ['+', '/']
data= 'FcjTCgD1EffEm2rPC3bTyL5Wu2bKBI9KAZrwFgrUygHN'
llen=len(data)
llen2=len(letters)
serial=[]
for j in range(llen):
for i in range(llen2):
if letters[i]==data[j]:
serial.append(i)
llen3=len(serial)

ascii_list = [ ('{:0>6}').format(str(bin(i)).replace('0b', '')) for i in serial ]
output =[] #预备
while ascii_list:
temp_list = ascii_list[:4]
temp_str = ('').join(temp_list)
temp_str_list = [temp_str[x:x + 8] for x in [0, 8 ,16]] # 切成8位
temp_str_list = [int(x, 2) for x in temp_str_list]



for x in temp_str_list:
output.append(x)
ascii_list = ascii_list[4:]
output = list(output)
for i in range(len(output)):
if i % 2 == 0: #偶数位与奇数位分开处理
output[i] = (output[i] + 2) #变成偶数加一位
output[i] = (output[i] - 1)
output.reverse()
flag=''
for i in range(len(output)):
output[i]=chr(output[i])
flag+=output[i]
print(flag)

hgame{W3lc0me_To_anothe2_Python!}