gpt4 book ai didi

python - 哪种字符串哈希算法生成 32 位或 64 位带符号整数?

转载 作者:行者123 更新时间:2023-11-29 12:17:28 29 4
gpt4 key购买 nike

我想将可变长度(6-60 个字符长)的字符串散列为 32 位 signed integers为了在 PostgreSQL 中节省磁盘空间。

我不想加密任何数据,散列函数需要可重现并可从 Python 调用。问题是我只能找到生成无符号整数(如 CityHash)的算法,因此生成的值最多为 2^32 而不是 2^31。

这是我目前所拥有的:

import math
from cityhash import CityHash32

string_ = "ALPDAKQKWTGDR"
hashed_string = CityHash32(string_)
print(hashed_string, len(str(hashed_string)))
max_ = int(math.pow(2, 31) - 1)
print(hashed_string > max_)

最佳答案

Ryan 在评论中回答了这个问题。只需从哈希结果中减去 2147483648 (= 2^31)。

CityHash32(string_) - math.pow(2, 31)

CityHash64(string_) - math.pow(2, 63)

Ryan 还提到,使用 SHA-512 并将结果截断为所需的位数将导致比上述方法更少的冲突。

关于python - 哪种字符串哈希算法生成 32 位或 64 位带符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45279590/

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