我正在使用字符串散列来按以下方式播种随机状态:
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
环境变量设置为一个整数值来重新获得确定性,但我可能更喜欢一些感觉不那么苛刻的东西,并且不会完全忽视随机散列所增加的额外安全性。建议?
答案 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