对于TACACS使用md5字节XOR

时间:2017-03-14 14:24:57

标签: python python-3.x encryption

我正在编写一个基本的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并只加密它?

1 个答案:

答案 0 :(得分:0)

我没有使用服务器的响应头生成新的pseudo_pad。因此,答复仍然模糊不清。