我正在编写一个基本的TACACS客户端模块。我可以通过struct.pack来获取线路上的数据包,因为我已经检查过wireshark。但我不知道如何处理md5的字节XOR,甚至不确定我是否正确创建了哈希。 TACACS的RFC表示从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并只加密它?
答案 0 :(得分:0)
我没有使用服务器的响应头生成新的pseudo_pad。因此,答复仍然模糊不清。