C++ 什么是3种子参数?

C++ 什么是3种子参数?,c++,hash,C++,Hash,需要一个种子参数。我应该使用什么值以及它的作用是什么?一个名为seed的值在这里代表salt。向它提供任何随机但私有的(应用程序)数据,因此哈希函数将为相同的数据提供不同的结果。例如,此功能用于制作数据摘要,以检测第三方对原始数据的修改。在知道您使用的盐之前,他们几乎无法复制有效的哈希值 Salt(或seed)还用于防止不同数据的哈希冲突。例如,数据块A和B可能会产生相同的散列:h(A)=h(B)。但是,如果提供某种附加数据,您可以避免这种冲突情况。冲突非常罕见,但有时salt是一种针对具体数据

需要一个种子参数。我应该使用什么值以及它的作用是什么?

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


Salt(或seed)还用于防止不同数据的哈希冲突。例如,数据块A和B可能会产生相同的散列:h(A)=h(B)。但是,如果提供某种附加数据,您可以避免这种冲突情况。冲突非常罕见,但有时salt是一种针对具体数据集避免冲突的方法。

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

为什么要提供

一个原因是攻击者可能使用哈希函数的属性来构造拒绝服务攻击。他们可以通过向散列函数提供字符串来实现这一点,所有散列函数的值都相同,从而破坏了散列表的性能。但是,如果您对程序的每次运行使用不同的种子,则攻击者必须更改字符串集

见:


还有一个

实际上它是满的。非加密散列函数的
sault
的用途是什么?杂音散列是一种非加密散列函数。对于安全消息摘要来说,这不是一个合适的选择。这与以下思想有关,但并不完全等同:您拥有一个完整的系列,而不是一个哈希函数(在本例中,哈希3是一个系列,每个可能的种子值都给您该系列中的特定函数)。如果您发现您的输入数据碰巧产生了分布不均匀的散列(例如,由于攻击),您可以选择一个新的随机种子值并重新散列数据;数据不太可能为新的种子值生成不好的分布,因此您战胜了攻击。@JohnBartholomew如果在一个非常大的数据库中使用散列,则重新散列所有内容也可能不实用。