无论输入如何(即MD5>> 128位,SHA-256>> 256位),散列函数总是产生固定长度的输出,但为什么呢?
我知道这是设计师设计它们的方式,但为什么他们设计的输出具有相同的长度? 这样它可以以一致的方式存储吗?更容易比较?不太复杂?
答案 0 :(得分:4)
因为这就是哈希的定义。请参阅wikipedia
哈希函数是可用于映射数字数据的任何函数 任意大小的数字数据固定大小。
如果您的问题与有用为什么哈希是固定大小有关,则有多种原因(非详尽列表):
确实存在特殊的哈希函数,它们能够生成指定固定长度的输出哈希,例如所谓的sponge functions。
答案 1 :(得分:1)
正如您所见,它是standard。
您还想要的是标准:
某些应用程序可能需要带有消息摘要的哈希函数 长度不同于哈希函数提供的长度 标准。在这种情况下,可以使用截断的消息摘要, 从而应用具有较大消息摘要长度的散列函数 要散列的数据,以及生成的消息摘要 通过选择适当数量的最左边的位来截断。
答案 2 :(得分:1)
通常是因为您希望使用哈希值或其中某些部分来快速存储和查找固定大小的数组中的值。 (例如,这是不可调整大小的哈希表的工作原理。)
为什么使用固定大小的数组而不是其他可扩展的数据结构(如链表或二叉树)?因为访问它们往往在理论上和实际上都很快:假设散列函数是好的并且占用的表条目的比例不是太高,则可以获得O(1)查找(与O(log n)查找树)基于数据结构或列表的O(n)平均值。并且这些访问在实践中很快:在计算散列(通常需要具有低隐藏常量的密钥大小的线性时间)之后,通常只需要一个位移,一个位掩码和一个或两个间接存储器访问到一个连续的(a)在现代CPU上很好地利用缓存和(b)流水线的内存块,因为很少需要指针间接。