Python 3 中的确定性哈希

新手上路,请多包涵

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

 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 环境变量设置为一个整数值以重新获得确定性,但我可能更喜欢感觉不那么骇人听闻的东西,并且不会完全忽视通过添加的额外安全性随机散列。建议?

原文由 Jimmy C 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 982
2 个回答

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

原文由 user149341 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题