我在创建TACACS +客户端脚本时遇到问题。我得到一个回复,我的密钥与服务器不匹配,(7,0,57,0,b' 10.163.255.107:无效的AUTHEN / START数据包(检查键)',b& #39;'),但我可以从tac_plus服务器解码,以便密钥匹配。此外,我有tac_plus服务器处于调试模式,并看到前四个或五个字节的相同值,然后数据更改。但是,脚本中的所有哈希值都与服务器上的哈希值匹配。我想知道它是否在字符串到字节的转换中。下面是我为taca_plus
生成哈希的地方def encrypt(packet, tac_key):
seed = packet[4:8] + bytes(tac_key, 'utf-8') + packet[:1] + packet[2:3]
hash = None
while 1:
if hash is None:
hash = MD5.new(seed).digest()
else:
hash = MD5.new(seed + hash).digest()
for char in hash:
yield char
我先打包tac_plus / tacacs主体。
def tac_body(user, data, rem_addr='10.163.255.201', port="TCP49"):
user_len = len(user)
port_len = len(port)
rem_addr_len = 0
data_len = len(data)
fmt = "! B B B B B B B B %ds %ds %ds" % (user_len, port_len, data_len)
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,
bytes(user, 'utf-8'), bytes(port, 'utf-8'), bytes(data, 'utf-8'))
return body
然后加密......
encrypted_data = ''.join([chr(operator.xor(c[0], c[1])) for c in zip(body, encrypt(header, tac_key))])
我开始相信它与tac_key字符串有关,因为我可以通过更改编码来更改哈希值。
答案 0 :(得分:-1)
与此同时,我发现了这一切。当我发送加密部分时,我不得不用latin-1编码。
msg = header + bytes(encrypted_data, encoding='latin-1')`
去图。