为什么哈希输出的长度是固定的?

Alv*_*ida 8 algorithm hash message-digest

无论输入如何(即 MD5 >> 128 位,SHA-256 >> 256 位),哈希函数总是产生固定长度的输出,但为什么呢?

我知道这是设计师设计它们的方式,但为什么他们将输出设计为具有相同的长度?以便它可以以一致的方式存储?比较容易比较?不那么复杂?

Ale*_*lex 6

因为这就是哈希的定义。参考维基百科

散列函数是可用于任意大小的数字数据映射到的数字数据的任何功能的固定大小

如果您的问题涉及为什么将哈希设为固定大小是有用的,则有多种原因(非详尽列表):

  • 散列通常以有损的方式将较大(通常是任意大小)的输入编码为较小的大小,即与压缩函数不同,您不能通过“反转”过程从散列值重建输入。
  • 具有固定大小的输出很方便,特别是对于设计用作查找键的散列。
  • 您可以为散列值可预测地(预)分配存储空间并将它们索引到连续的内存段(例如数组)中。
  • 对于“本地字大小”的散列,例如 16、32 和 64 位整数值,您可以进行非常快速的相等和排序比较。
  • 任何处理哈希值的算法都可以使用一组固定大小的操作来生成和处理它们。
  • 您可以在例如布隆过滤器中以可预测的方式组合使用不同散列函数生成的散列。
  • 您不需要浪费任何空间来编码哈希值有多大。

确实存在特殊的散列函数,它们能够产生指定固定长度的输出散列,例如所谓的海绵函数