Data structures 为什么不';数据结构中使用的t加密哈希函数?

Data structures 为什么不';数据结构中使用的t加密哈希函数?,data-structures,hash,cryptography,Data Structures,Hash,Cryptography,虽然一些算法(如MD5)在安全行业还没有经受住时间的考验,但其他一些算法(如SHA系列函数)已经经受住了时间的考验(到目前为止)。然而,尽管在其域内发现或理论上存在冲突,加密哈希函数仍然为任意长度和类型的数据提供了难以置信的固定长度输出映射的分布范围——为什么它们在数据结构中不经常使用?散列表(提供了一个很好的函数)的目标不是要将每个输入映射到一个唯一的键,从而使链接、嵌套表和其他冲突处理技术变得完全没有意义吗?它当然很方便,可以为函数提供几乎任何内容,并且知道您将收到的密钥的确切长度!对我来说

虽然一些算法(如MD5)在安全行业还没有经受住时间的考验,但其他一些算法(如SHA系列函数)已经经受住了时间的考验(到目前为止)。然而,尽管在其域内发现或理论上存在冲突,加密哈希函数仍然为任意长度和类型的数据提供了难以置信的固定长度输出映射的分布范围——为什么它们在数据结构中不经常使用?散列表(提供了一个很好的函数)的目标不是要将每个输入映射到一个唯一的键,从而使链接、嵌套表和其他冲突处理技术变得完全没有意义吗?它当然很方便,可以为函数提供几乎任何内容,并且知道您将收到的密钥的确切长度!对我来说,似乎是失效安全协议的理想用途。

加密哈希函数可以并且被用作哈希表中的哈希函数。只是不经常。加密哈希的缺点是,与哈希表中使用的更传统的哈希函数相比,它们所需的处理能力非常“昂贵”

传统的哈希函数具有哈希表所需的所有特性,但需要更少的CPU周期来执行。不过,现在大多数芯片组都包含了用于这些加密哈希的硬件加速

并且使用加密哈希函数生成的“索引”太大。所以你需要通过减少或者掩盖来减少它。(您不需要16字节的哈希表索引;)


总而言之,它们通常不值得麻烦。

在哈希表中,在减少表的模化大小后,几乎总是会发生冲突,因为您可能不想创建包含2^128个条目的表;)最近出现了SipHash的动向,SipHash是一种密钥加密哈希,目的是避免攻击者作为拒绝服务攻击的一种形式引发冲突。(搜索哈希DoS)请注意,加密哈希函数的抗冲突性完全取决于输出大小。对于32位散列,由于生日问题,即使是一个理想的散列函数也必须在大约2^16个键(65000个,对于一个散列表来说,这是一个非常合理的大小)处预期冲突。