Ich möchte eine Kollision für eine einfache Hash-Funktion unter (Python) finden:Wie kann ich eine Kollision für eine Spielzeug-Hash-Funktion finden?
def hash_function(s=''): # 'Hello World!' -> 7b2ea1ba
a, b, c, d = 0xa0, 0xb1, 0x11, 0x4d
result_hash = ''
for byte in bytes(s, 'ascii'):
a ^= byte
b = b^a^0x55
c = b^0x94
d = c^byte^0x74
for i in [d, c, a, b]:
tmp = str(hex(i))[2:]
result_hash += tmp if len(tmp) is 2 else '0' + tmp
return result_hash
hier ist auch eine js Implementierung in jsbin
ich this question on SO gefunden habe, aber die Antwort war nicht da für mich nachvollziehbar.
Die Länge der Ausgabe der Funktion ist immer gleich 8 a
, b
, c
und d
Variablen ganze Zahlen sind, die in Hex-Werte in Ende umgewandelt werden die resultierende Hash zu bilden, dh 123 -> 7b
, 46 -> 2e
, 13 -> 0d
und bald.
Könnten Sie mir helfen, eine Kollision für diese Funktion zu finden?
Das Ergebnis Platz ist 32 Bit, und es ist der Geburtstag Paradox, so bruteforcing es nicht möglich sein sollte. –