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

Python实现ROR算法计算字符串哈希时为何漏掉最后一个字符

问题根因

你使用的是Windows shellcode场景下常用的API哈希算法,出现结果偏差由两个问题共同导致:

  • 该算法要求将字符串末尾的空终止符\0(数值为0)作为独立字符参与哈希计算,你当前的代码仅遍历了字符串的可打印字符,遗漏了这个额外的空字符
  • Python的整数为高精度无溢出类型,而该算法基于32位无符号整数设计,运算过程中没有做32位截断,会导致数值超出预期范围

修正后代码

def ROR(data, shift, size=32):
    shift %= size
    data &= 0xFFFFFFFF
    body = data >> shift
    remains = (data << (size - shift)) & 0xFFFFFFFF
    return (body + remains) & 0xFFFFFFFF


def calculateHash(apiName):
    result = 0
    for ch in apiName:
        result = ROR(result, 0x13)
        result += ord(ch)
        result &= 0xFFFFFFFF
    # 补充处理末尾的空终止符
    result = ROR(result, 0x13)
    result += 0
    result &= 0xFFFFFFFF
    return result

调用calculateHash("timeGetTime")即可得到正确结果0xFF407C2F。

补充说明

你观察到的“循环在末尾'e'处停止”属于误判,循环已经完整遍历了字符串的所有可打印字符,问题本质是算法要求多处理一个空终止符,不是循环逻辑异常。

内容的提问来源于stack exchange,提问作者Raafat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:02