>> hash_function-6ren">
gpt4 book ai didi

python - 输出从 0 到 255 的整数的哈希函数?

转载 作者:太空狗 更新时间:2023-10-30 01:43:24 26 4
gpt4 key购买 nike

我需要一个非常简单的 Python 哈希函数,它将字符串转换为 0 到 255 之间的整数。

例如:

>>> hash_function("abc_123")
32
>>> hash_function("any-string-value")
99

只要我每次调用该函数时得到相同的整数,整数是什么并不重要。

我想使用整数根据网络名称生成随机子网掩码。

最佳答案

您可以只使用 hash() function 的模数输出:

def onebyte_hash(s):
return hash(s) % 256

这就是字典和集合所使用的(哈希模内表大小)。

演示:

>>> onebyte_hash('abc_123')
182
>>> onebyte_hash('any-string-value')
12

警告:在 Python 3.3 及更高版本上,哈希随机化默认启用,在 Python 重启之间您将获得不同的值。那么,只有在您不重新启动 Python 进程或不设置 PYTHONHASHSEED 时,哈希才会稳定。到一个固定的十进制数(0 完全禁用它)。在 Python 2 和 3.0 到 3.2 上,哈希随机化要么不可用,要么仅在您明确设置种子时启用。

另一种选择是 hashlib.md5()并取第一个字节的(整数值):

import hashlib

try:
# Python 2; Python 3 will throw an exception here as bytes are required
hashlib.md5('')
def onebyte_hash(s):
return ord(hashlib.md5(s).digest()[0])
except TypeError:
# Python 3; encode the string first, return first byte
def onebyte_hash(s):
return hashlib.md5(s.encode('utf8')).digest()[0]

MD5 是一种完善的加密散列,输出在 Python 版本中是稳定的并且独立于散列随机化。

后者的缺点是速度稍慢; Python 在字符串对象上缓存字符串散列,因此大多数情况下稍后检索散列既快速又便宜。

关于python - 输出从 0 到 255 的整数的哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702457/

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