2016-10-09 2 views
0

에서 해시 확장 공격이 나는 같은 MD5를 생성하는 데 시간을 사용하려면 :파이썬 : 여기 <p></p> 코드입니다 b를 파이썬

k = "secret" 
m = "show me the grade" 
m2 = "show me the grade and change it to 100" 
x = " and change it to 100" 
a = md5(k + m) 
b = md5(k + m2) 
print "have---> " + a.hexdigest() #9f4bb32ac843d6db979ababa2949cb52 
print "want---> " + b.hexdigest() #aba1d6fede83a87d9d6e22bf75974599 

h = md5(state="9f4bb32ac843d6db979ababa2949cb52".decode("hex"),count=512) 
h.update(x) 

print h.hexdigest() # these two lines get 958acc96a173fd4d7571ac365db06f65 
print md5((k + m + padding(len(k + m)*8))+ x).hexdigest() 

def padding(msg_bits): 
    """padding(msg_bits) - Generates the padding that should be 
    appended to the end of a message of the given size to reach 
    a multiple of the block size.""" 

    index = int((msg_bits >> 3) & 0x3f) 
    if index < 56: 
     padLen = (56 - index) 
    else: 
     padLen = (120 - index) 

    # (the last 8 bytes store the number of bits in the message) 
    return PADDING[:padLen] + _encode((msg_bits & 0xffffffffL, msg_bits>>32), 8) 

나도 몰라 왜 마지막 줄 수 없었다 출력 aba1d6fede83a87d9d6e22bf75974599. 패딩에 문제가 있습니까?

+1

우리가 원하는 것을 모릅니다. 어떻게 대답 할 수 있습니까? –

+0

MD5를 생성하기 위해 h를 사용하고 싶습니다. md5 (k + m2) –

+1

이것은 유용한 정보입니다. [질문]을 읽고 귀하의 질문을 통해 당신이 무엇을 기대하고, 무엇을 얻으며, 우리가 원하는 것을 지정하십시오. –

답변

0

예상 해시 (aba1 ..)가 k + m + x의 md5 해시이고 (958a ..) 해시가 k + m + padding + x 인 md5 해시이기 때문입니다.

길이 확장 공격을 사용하면 해시 및 메시지 길이가 l = len(k + m) 인 경우에만 해시 h2 = md5(k + m + padding + x)을 생성 할 수 있습니다. 그러나, 내가 아는 한, 메시지 사이의 패딩을 제거 할 수 없으므로, 사이에 약간의 쓰레기가 남아 있습니다.

+0

그래서 어떻게 PL과 h1과 내가 h2를 생성하는 방법을 설명 할 수 있을까? –

+0

내가 말했듯이, 내가 아는 한 당신은 ** 길이 확장 공격으로 ** 할 수 없습니다. (그리고 내가 아는 한 다른 어떤 방법으로도 가능하지 않다. md5가 손상 될 수도 있지만, 내가 아는 한 아직 충분히 파손되지 않아서 계산적으로 가능한 프리 이미지 공격을 할 수 없다) –