1
我想找到下面一個簡單的散列函數(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
這裏也是一個js實現in jsbin
我發現this question on SO,但得到的答覆有沒有對我來說很容易理解。
的函數的輸出的長度始終等於8 a
,b
,c
和d
變量是被轉換成十六進制值的末端以形成所得到的散列整數,即123 -> 7b
,46 -> 2e
,13 -> 0d
和等等。
那麼,你能幫我找到這個功能的碰撞嗎?
結果空間是32位,並且存在生日悖論,所以窮舉它不應該是可能的。 –