以下の単純なハッシュ関数の衝突を見つけたい(python):
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
ここにもjsbinの js 実装があります
SO でこの質問を見つけましたが、そこの答えは私にはあまり理解できませんでした。
関数の出力の長さは常に 8 です。a
、b
、c
およびd
変数は整数であり、最終的に 16 進数値に変換されて結果のハッシュが形成されます (つまり123 -> 7b
、46 -> 2e
、13 -> 0d
など)。
それで、その関数の衝突を見つけるのを手伝ってくれませんか?