題源自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