最终flag get

——20230815——
##### [SWPUCTF 2021 新生赛]简简单单的解密
题目源码如下:
import base64,urllib.parse
key = “HereIsFlagggg”
flag = “xxxxxxxxxxxxxxxxxxx”
s_box = list(range(256))
j = 0
for i in range(256):
j = (j + s_box[i] + ord(key[i % len(key)])) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
res = []
i = j = 0
for s in flag:
i = (i + 1) % 256
j = (j + s_box[i]) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
t = (s_box[i] + s_box[j]) % 256
k = s_box[t]
res.append(chr(ord(s) ^ k))
cipher = “”.join(res)
crypt = (str(base64.b64encode(cipher.encode(‘utf-8’)), ‘utf-8’))
enc = str(base64.b64decode(crypt),‘utf-8’)
enc = urllib.parse.quote(enc)
print(enc)
enc = %C2%A6n%C2%87Y%1Ag%3F%C2%A01.%C2%9C%C3%B7%C3%8A%02%C3%80%C2%92W%C3%8C%C3%BA
注释一波:
import base64,urllib.parse
key = “HereIsFlagggg”
flag = “xxxxxxxxxxxxxxxxxxx”
s_box = list(range(256)) # range()生成一系列连续的整数,list()生成列表,此处即生成一个0-255的数组
j = 0
for i in range(256):
a=len(key)
b=i%a # %——取模,返回除法的余数
c=key[b]
d=ord©
print(‘a=’,a,‘b=’,b,‘c=’,c,‘d=’,d,‘j=’,j)
print(‘i=‘,i,’’)
j = (j + s_box[i] + d) % 256
print('__j=',j,'__')
s_box[i], s_box[j] = s_box[j], s_box[i]
print('s_box[',i,']=',s_box[i],'s_box[',j,']=',s_box[j])
print('=====================================')
res = []
print(‘res=’,res)
print(‘————————for loop 1————————’)
i = j = 0 #i,j值归零
for s in flag:
i = (i + 1) % 256
j = (j + s_box[i]) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
t = (s_box[i] + s_box[j]) % 256
k = s_box[t]
print(‘new_for_i=’,i,‘new_for_j=’,j,‘s_box[i]=’,s_box[i],‘s_box[j]=’,s_box[j],‘t=’,t,‘k=s_box[t]=’,k)
m=ord(s)
print(‘m=’,m)
n=m^k
print(‘n=’,n)
o=chr(n)
print(‘chr(n)=’,o)
p=res.append(o) #append是属于python中的一个函数,它主要是用来在列表末尾添加新的对象。语法格式为list.append(obj)
print('res.append(chr(n)=',p)
print(‘————————for loop 2————————’)
cipher = “”.join(res)