搭建簡單的aes
的ecb
攻擊試驗時,需要直接獲取query
引數,但是傳過去的引數都是自行構建的,如下:
import time
timestamps =
int(time.time())
.to_bytes(length=
4, byteorder=
'little'
)server_id = settings.server_id.encode(settings.charset)
plaintext = timestamps + server_id
ciphertext = aes.encrypt(plaintext)
response = requests.get(settings.server_address, params=
)
可以看到,這裡傳過去的引數是位元組型,且無法直接decode('utf-8')
對應的引數,因為timestamps
我使用了位元組儲存。如果直接在服務端使用get_argutment('ciphertext')
去獲取對應的引數,肯定會直接報錯的,因為tornado
的所有獲取引數的方法都會對獲取到的引數執行預設的decode
操作,如注釋所說:
這個方法會在所有get_arguments
被呼叫,而且它也沒有提供可以自行設定字符集的引數(decode('latin1')
其實是可行的)。所以,需要直接得到url
裡面的引數,不能使用已經包裝好的方法。
def
get(self,
*args,
**kwargs)
: ciphertext = self.request.query_arguments[
'ciphertext'][
0]
直接從query_arguments
中獲取引數
需要注意的是,parse_qs_bytes
方法是使用latin1
進行編碼的
考慮到latin1
的編碼空間:
可以看到,latin1
是iso-8859-1
的別名,有些環境下寫作latin-1
。iso-8859-1
編碼是單位元組編碼,向下相容ascii
,其編碼範圍是0x00
-0xff
,0x00
-0x7f
之間完全和ascii一致,0x80
-0x9f
之間是控制字元,0xa0
-0xff
之間是文字元號。
latin1
的編碼空間符合我對timestamp
的處理,當然,手動引入from tornado.escape import url_unescape
然後對self.request.uri
進行url_unescape(self.request.uri)
也是可以的,這樣可控性更好,只是相對麻煩一點。
沒事別瞎折騰。。做個實驗都快出花了。
日常犯錯 測介面產生的錯誤
用postman測介面 如果改動了程式的xml檔案,務必重啟伺服器。如果發現自己的類裡面有4個引數,但是用postman給出4個引數時卻發生404 的錯誤,請務必檢查自己類裡面的引數名稱跟postman裡面輸入的引數名稱是否保持一致,還有自己的函式裡面的request是否是對應的request pu...
opencv學習的日常積累(2)
6 計算輪廓的周長,刪除輪廓 int arclength contours i ture ture是閉合,false是開的 itr contours.erase itr 7 幾個常用函式的區別 pow double x,double y 返回值為double powf double x,double...
日常總結的知識點(2)
1 關於lerp 的理解,所有的lerp就是插值,怎樣理解呢,lerp方法裡面有三個引數,起點,終點,比例 比例的意思就是佔起點和終點之間的百分比,是乙個 0 1 之間的數。transform.rotation quaternion.lerp transform.rotation,qua,time....