什么是MurmurHash3种子参数?

时间:2012-02-11 15:09:28

标签: c++ hash

MurmurHash3_x86_32()需要种子参数。我应该使用什么价值以及它做什么?

3 个答案:

答案 0 :(得分:29)

种子参数是您随机化哈希函数的一种方法。您应该在散列函数的同一应用程序中为散列函数的所有调用提供相同的种子值。但是,每次调用应用程序(假设它正在创建新的哈希表)都可以使用不同的种子,例如随机值。

为什么提供?

一个原因是攻击者可能会使用哈希函数的属性来构建拒绝服务攻击。他们可以通过向哈希函数提供字符串来执行此操作,所有字符串都以相同的值哈希,从而破坏哈希表的性能。但是,如果您为程序的每次运行使用不同的种子,则攻击者必须使用的字符串集会发生变化。

请参阅:Effective DoS on web application platform

还有Twitter tag for #hashDoS

答案 1 :(得分:1)

在给定的实现中,seed用于构造初始化向量。它是任意值,为不同的数据选择不同的值会降低碰撞率。但请注意,您应该知道seed - data对。

答案 2 :(得分:0)

这里名为seed的值代表盐。向其提供任何随机但私有(对您的应用程序)数据,因此散列函数将为相同数据提供不同的结果。此功能用于例如对您的数据进行摘要以检测第三人对原始数据的修改。在他们知道您使用的盐之前,他们几乎无法复制有效的哈希值。

Salt(或种子)也用于防止不同数据的哈希冲突。例如,您的数据块A和B可能会生成相同的哈希值:h(A)== h(B)。但是,如果提供某种附加数据,您可以避免这种冲突的情况。碰撞是非常罕见的,但有时盐是一种避免它们用于具体数据集的方法。