Python中Murmur Hash 3 x64 128位哈希结果不符问题求助
如何用pymmh3复现MurmurHash3 x64 128位在线工具的哈希结果?
我用在线Murmur Hash工具,设置为Murmur Hash 3 x64 128 bit时,能得到User Agent输入的正确哈希值,但用Python的pymmh3库复现逻辑时,结果和正确值不符,怎么调整才能匹配网站的哈希逻辑?
我的测试代码:
import pymmh3 def testHash(input_string): hash_result = pymmh3.hash128(input_string, seed=0, x64arch=True) hex_hash = format(hash_result & ((1 << 128) - 1), '032x') print(hex_hash) testHash("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36")
- 函数输出:
4dc49759f17d090f97fca4dadead58f9 - 在线工具正确输出:
97fca4dadead58f94dc49759f17d090f
问题原因
差异来自128位哈希的高低位顺序:在线工具是将计算出的高64位和低64位按「高64位在前、低64位在后」拼接,而pymmh3.hash128返回的结果是「低64位在前、高64位在后」的组合值,直接转十六进制会顺序颠倒。
解决代码
修改代码,拆分高低64位并交换顺序后拼接:
import pymmh3 def testHash(input_string): hash_result = pymmh3.hash128(input_string, seed=0, x64arch=True) # 拆分低64位和高64位 low_64 = hash_result & ((1 << 64) - 1) high_64 = hash_result >> 64 # 按高64位+低64位的顺序格式化为十六进制字符串 correct_hex_hash = f"{high_64:016x}{low_64:016x}" print(correct_hex_hash) testHash("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36")
运行后输出结果与在线工具完全一致:97fca4dadead58f94dc49759f17d090f
内容的提问来源于stack exchange,提问作者Ahmed Zaidan
相关产品推荐
相关产品推荐

