1
私は(パイソン)以下の単純なハッシュ関数の衝突を見つけるしたいと思います:ここもJSの実装in jsbinおもちゃハッシュ関数の衝突を見つける方法はありますか?
だ
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
私はthis question on SOを見つけましたが、答えはありませんでした私にはかなり分かりやすい。
関数の出力の長さは常に8 a
に等しい、b
、c
とd
変数は、結果のハッシュを形成するために、最終的に進値に変換される整数、すなわち123 -> 7b
、46 -> 2e
、13 -> 0d
されそうです。
この関数の衝突を見つけるのを手伝ってもらえますか?
結果空間は32ビットであり、誕生日パラドックスがあり、それが可能であってはならないbruteforcing。 –