Я хотел бы найти коллизию для простой хэш-функции ниже (питон):Как найти столкновение для функции хеш-игрушек?
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
здесь также реализация JS in jsbin
Я нашел this question on SO, но ответа не было вполне понятный мне.
Длина выходе функции всегда равна 8. a
, b
, c
и d
переменных являются целыми числами, которые преобразуются в шестнадцатеричные значения, в конце концов, чтобы сформировать в результате хэша, т.е. 123 -> 7b
, 46 -> 2e
, 13 -> 0d
и скоро.
Итак, не могли бы вы помочь мне найти столкновение для этой функции?
В результате пространство 32 бит, и есть парадокс дня рождения, поэтому bruteforcing это не должно быть возможно. –