gpt4 book ai didi

python - 将哈希算法从 C 语言翻译成 Python

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:07 25 4
gpt4 key购买 nike

我的客户是一名 Python 程序员,我为他创建了一个 C++ 后端,其中包括许可证生成和检查。为了更加安全,Python 前端还将执行许可证的有效性检查。

然而,许可证生成和检查算法基于哈希方法,该方法依赖于整数具有固定字节大小并且对值进行位移不会扩展整数字节数这一事实。

这是一个简化的示例代码:

unsigned int HashString(const char* str) {
unsigned int hash = 3151;
while (*str != 0) {
hash = (hash << 3) + (*str << 2) * 3;
str++;
}
return hash;
}

如何将其翻译成 Python?直接翻译显然会产生不同的结果:

def hash_string(str):
hash = 3151
for c in str:
hash = (hash << 3) + (ord(c) << 2) * 3
return hash

例如:

hash_string("foo bar spam")  #  228667414299004
HashString("foo bar spam") // 3355459964

编辑:同样对于 PHP 也是必要的,因为在线商店也应该能够生成有效的许可证。

最佳答案

&屏蔽哈希值:

def hash_string(str, _width=2**32-1):
hash = 3151
for c in str:
hash = ((hash << 3) + (ord(c) << 2) * 3)
return hash & _width

这会手动将散列缩减到原来的大小。您只需要限制一次结果;似乎那些较高的位不会对最终结果产生影响。

演示:

>>> hash_string("foo bar spam")
3355459964

关于python - 将哈希算法从 C 语言翻译成 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com