Python 3中的确定性散列

时间:2015-01-15 00:20:12

标签: python python-3.x hash

我正在使用字符串散列来按以下方式播种随机状态:

context = "string"
seed = hash(context) % 4294967295 # This is necessary to keep the hash within allowed seed values
np.random.seed(seed)

不幸的是(对于我的用法)在Python 3.3及更高版本的运行之间是不确定的。我知道我可以将PYTHONHASHSEED环境变量设置为一个整数值来重新获得确定性,但我可能更喜欢一些感觉不那么苛刻的东西,并且不会完全忽视随机散列所增加的额外安全性。建议?

2 个答案:

答案 0 :(得分:8)

使用专用的哈希函数。 zlib.adler32()是一个很好的选择;或者,查看hashlib模块以获取更多选项。

答案 1 :(得分:1)

强制Python的内置hash是确定性的 本质上是hacky。如果你想避免hackitude,请使用不同的散列函数 - 参见例如Python-2:https://docs.python.org/2/library/hashlib.html, 并在Python-3中:https://docs.python.org/3/library/hashlib.html