2016-10-09 10 views
0

I h verwenden möchten die gleiche md5 zu erzeugen, wie bPython: Hash Erweiterung Angriff in Python

Hier ist der Code:

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) 

Ich weiß nicht, warum die letzte Zeile konnte nicht Ausgabe aba1d6fede83a87d9d6e22bf75974599. Stimmt etwas mit der Polsterung nicht?

+1

Wir wissen nicht einmal was Sie wollen, wie sollen wir antworten können? –

+0

Ich möchte h verwenden, um MD5 zu erzeugen, entspricht md5 (k + m2) –

+1

Das ist ein nützliches Stück Information. Bitte lesen Sie [ask] und versuchen Sie zu spezifizieren, was Sie erwarten, was Sie stattdessen bekommen und was Sie von uns erwarten, indem Sie Ihre Frage bearbeiten. –

Antwort

0

Das ist, weil der erwartete Hash (aba1 ..) der md5-Hash von k + m + x ist, während der Hash, den Sie (958a ..) erhalten haben, der md5-Hash von k + m + padding + x ist.

Mit dem Length Extension Attack können Sie einen Hash h2 = md5(k + m + padding + x) generieren, der nur den Hash h1 = md5(k + m) und die Länge der Nachricht l = len(k + m) kennt. Soweit ich weiß, können Sie das Padding zwischen den Nachrichten jedoch nicht entfernen.

+0

Also könntest du erklären, wie man h2 mit h1 und l erzeugt? –

+0

Wie ich schon sagte, kann man es ** mit einem Längenangriff nicht tun. (Und soweit ich weiß, ist es auch mit keiner anderen Methode möglich; md5 ist vielleicht defekt, aber soweit ich weiß, ist es noch nicht genug gebrochen, dass Sie einen rechnerisch machbaren Urbild-Angriff darauf durchführen könnten) –