【NSSCTF】刷题记录——[SWPUCTF 2024 新生赛]系列(REVERSE篇(1)


最终flag get


![](https://img-blog.csdnimg.cn/703fffc79fee4c2e9d402120610b944e.png)


——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)

join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

语法: ‘sep’.join(seq),参数说明:sep:分隔符。可以为空,seq:要连接的元素序列、字符串、元组、字典

上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串

以utf-8对cipher编码

encode()用来给字符串使用指定的编码格式来编码字符串。与之对应的是解码decode()。

语法:str.encode(encoding=‘UTF-8’,errors=‘strict’)

参数说明:str:需要操作的字符串,也就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值