python - python中的确定性递归散列

标签 python hash

Python 3 的默认散列函数不是确定性的(hash(None) 因运行而异),甚至没有尽最大努力以高概率生成唯一 id(hash(-1)==hash( -2) 是真的)。

是否有其他一些散列函数可以很好地用作校验和(即两个数据结构散列到相同值的概率可以忽略不计,并且每次运行 python 都返回相同的结果),并且支持所有 python 的内置数据类型,包括无?

理想情况下,它将在标准库中。我可以腌制对象或获取字符串表示,但这似乎不必要,并且浮点数的字符串表示可能是非常糟糕的校验和。

我在标准库中找到了加密哈希 (md5,sha256),但它们只对字节串进行操作。

Haskell 似乎在他们的标准库中得到了这个 ~ 几乎是正确的......但是“Nothing::Maybe Int”和 0 都散列到 0,所以它也不完美。

最佳答案

您可以使用来自 hashlib 的任何哈希值在 pickled目的。
pickle.dumps not suitable for hashing .

您可以使用排序键 jsonhashlib .

hashlib.md5(json.dumps(data, sort_keys=True)).hexdigest()

取自:https://stackoverflow.com/a/10288255/3858507 ,根据安德鲁瓦格纳的评论。

顺便说一下,仅供引用,因为这会导致 安全漏洞 , PYTHONHASHSEED环境变量可用于禁用整个应用程序中散列的随机化。

关于python - python中的确定性递归散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45015180/

相关文章:

python - Tensorflow:无法从 tfrecord 中提取文件名

python - 网格到填充体素网格

python - 使用对象递归打印家谱

hash - 为什么Hash函数除法只用素数

python - 第二个 y 刻度重复轴刻度

python - 从 stdout 获取原始流数据到 python 程序

hash - 2个不同输入的哈希值可以相同吗?

c - 为什么负值会给从具有给定总和的数组中查找值对的程序带来段错误?

java - 检查 HashMap 和遍历 HashMap 中的键之间的区别

python - 如何使用 python 和 unity3d C# 比较图像的哈希值?