无法根据Python中的ID + Password + Challenge计算FREERADIUS CHAP响应

时间:2016-03-27 02:11:13

标签: python authentication hash freeradius

我很难根据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。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

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')