python用于web题里写解密脚本
题源自bugku里的WEB3
选择选项让他停止,F12后出现如下代码,一看数字就知道是ASC:
复制出来,写pyhton脚本如下,在编译器里跑一下
s='KEY{J2sa42ahJK-HS11III}'
key=s.split(';')
#py里面所有的变量都是对象,所以用对象的表示形式s.split();
#split这个函数功能是在()内指出的位置添加断点把这个字符串分开成为字符串的列表,那么key:{'K','E','Y' balabala}
flag=''
#提前声明一个没有长度的变量,后面往后接的时候才知道是在字符串类型后面接,用到‘+=’符号的变量都要提前声明变量类型
for i in key: flag+=chr(int(i[2:]))
#for这句 ”for 临时变量 in 可迭代对象:“ 别忘了加: if和else后面都要加: while后面也要加
#i[2:]是字符串的切片操作,其实含三个变量 i[a:b:c] 其中a是开始的下标(从0开始) b是结束的下标 c是步长(隔几取一个)
#其中a,b如果空白就是默认开始和结束,c不写默认为1就是每个都要 #这里就是截取了所有列表中各元素中的数字,然后把这些字符串里的数字转化成int型的数字,int型数字可以作为asc改变为char型,但要注意函数是chr()而不是char()
print(flag)
#要加括号
第二种脚本:
strs="KEY{J2sa42ahJK-HS11III}" strs=strs.replace("&#","") strs=strs.replace(";"," ") #1,去掉&#和;字符 strs=strs.strip() #2,去掉头尾多余的空格 不然最后的回车也会形成一个元素 chs = strs.split(" ") #3,转换为字符串数组 Python提供split()函数可以将一个字符串分裂成多个字符串组成的列表{'K','E','Y'。。。}。 strr="" for ch in chs: strr = strr + chr(int(ch)) #4,将ascii码转换为字符,上一种脚本写法是把每个字符串的数字那部分切片拎出来了;这种是直接对字符进行遍历操作了,因为剩下的都是数字字符。
#而py的for语句可以通过一个临时变量来遍历in后面的可迭代对象,很灵活,在这里就是遍历了每一个字符{'75','69',‘89'。。。} print(strr)
得到flag: KEY{J2sa42ahJK-HS11III}
关于python字符串的更多用法,这俩博客写的很好: https://www.jianshu.com/p/093702933003 https://www.runoob.com/python/python-strings.html