无法根据 Python 中的 ID + 密码 + 质询计算 FREERADIUS CHAP 响应

Unable to compute FREERADIUS CHAP response based on ID + Password + Challenge in Python

我正在努力计算基于 CHAP ID + 明文密码 + 挑战哈希的响应哈希。

到目前为止,以下是我的代码:

def computeResponse(id_hex,password, challenge):
    #id_hex_result = id_hex.encode("hex")
    result = id_hex+password+challenge
    print result
    response = hashlib.md5(result).hexdigest()
    print "Generated: ",response
    print "Captured : ef53ae181830c4822f14ca826054cc8c"
computeResponse("1","SantaCruzpass","c8ec74267d0bbff78fe49abf756c211d")

生成的响应不同,如下所示:

Generated:  e6d0a07960e4d15153caf37fd06cdc8e
Captured : ef53ae181830c4822f14ca826054cc8c

生成的哈希是程序计算的响应,而捕获的哈希是在 HQ 和 Freeradius 之间的身份验证期间捕获的实际响应哈希。

我是不是做错了?捕获的 CHAP Id 是“0x01”,它产生十六进制值 1。

您的密码已经是二进制形式。

尝试以下操作:

只需 binascii.unhexlify id_hex 和挑战,你就会得到你想要的。

def computeResponse(id_hex,password, challenge):

id_hex = binascii.unhexlify(id_hex)
challenge = binascii.unhexlify(challenge)
result = id_hex+password+challenge
print result
response = hashlib.md5(result).hexdigest()

我遇到了同样的问题。我的解决方案是:

def check_chap_password(clear_text_password, chap_challenge, chap_password):
    chap_id = chap_password[0:2]
    check_chap_password = chap_id + hashlib.md5(bytearray.fromhex(chap_id) + password + bytearray.fromhex(chap_challenge)).hexdigest()
    return check_chap_password == chap_password

示例:

check_chap_password('hello', '2d8f0e32ee566a4f26a9dc46eefeafc0', '6db35db7cf22ecc964ccbb9e6fa8afef')