You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:18:20