import random MAX_UINT32 = 2**32-1 HASHMASK = MAX_UINT32 def hashbytes32(data): if len(data) == 0: return 0 x = prefix x ^= data[0] << 7 for byte in data: x = (1000003 * x) ^ byte x &= HASHMASK x ^= len(data) x ^= suffix if x == -1: x = -2 return x DATA1 = b"\x00\xcf\x0b\x96\x19" DATA2 = b"\x00\x6d\x29\x45\x18" while True: prefix = (random.randint(0, 2**24-1) << 8) | 0x00 suffix = random.randint(0, MAX_UINT32) a = hashbytes32(DATA1) b = hashbytes32(DATA2) print(a==b, "%08x" % prefix, "%08x" % suffix)