我想在下面(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
最后转换为十六进制值形成结果哈希,即123 -> 7b
, 46 -> 2e
,13 -> 0d
等等。
那么,你能帮我找到那个函数的碰撞吗?