0
我正在編寫一個基本的TACACS客戶端模塊。我可以通過struct.pack在線上獲取數據包,因爲我已經檢查過wireshark。但我不知道如何處理md5的按字節異或,甚至不知道我是否正確創建散列。 TACACS的RFC說,從TACACS頭和'祕密密鑰'中獲取特定項目,並對其進行五次加密,在每次運行期間連接前一個散列。見下面使用md5逐字節XOR for TACACS
def encrypt(packet, tac_key):
key = packet[4:8] + bytes(tac_key, 'utf-8') + packet[:1] + packet[2:3]
h1 = md5()
h1.update(key)
hash = h1.digest()
previous = h1.digest()
for i in range(2, 6):
new = md5()
key = key + previous
new.update(key)
hash += new.digest()
previous = new.digest()
return hash
包已經通過struct.pack運行
body = struct.pack(fmt, TAC_AUTHEN_LOGIN, TAC_PLUS_PRIV_LVL_USER, TAC_PLUS_AUTHEN_TYPE_PAP, TAC_PLUS_AUTHEN_SVC_LOGIN,
user_len, port_len, rem_addr_len, data_len, bytearray(user, 'utf-8'),
bytearray(port, 'utf-8'), bytearray(data, 'utf-8)'))
這是做到這一點的正確方法或者我應該不上包,只是身體使用struct.pack加密它?
[TACACS + draft rfc](https://tools.ietf.org/html/draft-ietf-opsawg-tacacs-06) –
關於我唯一需要注意的是RFC草稿似乎使用了所有的整型數組, (據我所知,這隻對會話ID很重要),或者是大字節字節順序。 –
好的,澄清。我應該XOR變量身體,這是打包的二進制數據,或者我應該只是XOR身體作爲字符串。如果我將body用作XOR的散列,那麼我已經擁有所有ints,並且不需要使用'ord',就像我迄今爲止所做的那樣。在XOR之後我也會得到亂碼,我認爲這會顯示加密。順便說一句,用戶,端口,rem_addr和數據是不是int的文本。 –