首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tacacs客户端脚本md-5 ...again

tacacs客户端脚本md-5 ...again
EN

Stack Overflow用户
提问于 2017-03-18 05:32:25
回答 1查看 162关注 0票数 0

我在创建TACACS+客户端脚本时遇到了问题。我从服务器得到一个响应,表明我的密钥不匹配,(7,0,57,0,b'10.163.255.107 : Invalid AUTHEN/START packet (check keys)',b''),但我可以从tac_plus服务器解码,以便在某个地方密钥匹配。另外,我让tac_plus服务器处于调试模式,看到前四个或五个字节的值是相同的,然后数据会发生变化。然而,脚本中的所有散列值都与服务器上的散列值匹配。我想知道它是否在字符串到字节的转换中。下面是我为taca_plus生成散列的地方

代码语言:javascript
复制
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 body。

代码语言:javascript
复制
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

然后用这个加密。

代码语言:javascript
复制
encrypted_data = ''.join([chr(operator.xor(c[0], c[1])) for c in zip(body, encrypt(header, tac_key))])

我开始相信这与tac_key字符串有关,因为我可以通过更改编码来更改散列值。

EN

回答 1

Stack Overflow用户

发布于 2017-03-19 01:19:23

与此同时,我把一切都弄清楚了。当我发送加密的部分时,我必须用拉丁文-1进行编码。

代码语言:javascript
复制
msg = header + bytes(encrypted_data, encoding='latin-1')`

去想一想。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42867425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档