我很难根据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。
答案 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')