gpt4 book ai didi

haskell - 为什么 Data.HashTable 使用盐散列(来自 Data.Hashable)?

转载 作者:行者123 更新时间:2023-12-03 14:41:00 25 4
gpt4 key购买 nike

我不明白为什么Data.HashTable正在使用 Data.Hashable ,其中有 hashWithSalt作为(唯一/基本)方法。

这不符合计算哈希值一次并将其存储在对象中的自然优化(自然,因为 Haskell 对象是不可变的)。

如果我想使用 HashTables有了这个,我就不得不执行 hashWithSalt .
(从 1.2.0.* 到 1.2.1.*,hashable 重新引入 hash 作为类方法,但这没有帮助?)

实际的 Table 实现似乎没有使用 hashWithSalt (HashTable.ST.Linear 根本没有,HashTable.ST.Cuckoo 只使用两种固定盐)。

最佳答案

正如 Carl 在评论中指出的那样,移至 hashWithSalt方法超过 hash (正如原来的 Hashable 所使用的)是为了允许人们减轻基于哈希冲突的 DOS 攻击。在一段时间内,每次运行都会生成不同的随机默认盐,甚至使用 unsafePerformIO在后台。然而,对于那些对例如跨运行保持数据结构,获得可靠的基准测试数据等。

因此,当前的方法是提供该方法,但倾向于遵循固定的默认盐,然后在文档中添加警告,如果以面向公众的方式使用,这仍然容易受到各种潜在的 DOS 攻击向量的影响。 (您可以在此处的文档中亲自查看:http://hackage.haskell.org/package/hashable-1.2.1.0/docs/Data-Hashable.html)

因为hash是它自己的类方法,很容易实现一个带有“saltless”哈希的对象,并且你可以实现hashWithSalt就像 xor如果你愿意,可以加盐。或者,正如评论所指出的,您可以实现 hashWithSalt通过更合法的方法hash输入您的生成/备忘录 hash .

关于haskell - 为什么 Data.HashTable 使用盐散列(来自 Data.Hashable)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23844612/

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