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

标签 algorithm hash message-digest

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

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

最佳答案

因为这就是散列的定义。引用wikipedia

A hash function is any function that can be used to map digital data of arbitrary size to digital data of fixed size.

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

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

确实存在特殊的哈希函数,能够产生指定固定长度的输出哈希,例如所谓的sponge functions。 .

关于algorithm - 为什么哈希输出的长度是固定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29599047/

相关文章:

python - 在 python 中创建列表的特定排列

Java MessageDigest MD5 未返回预期结果

algorithm - 这个递归算法的大O

algorithm - 如何将多边形转换为非重叠三角形的集合?

ruby - Hash in Hash 给出错误的值作为返回?

java - Java语言中使用的哈希函数

javascript - 使用 Javascript 解析 Ruby 哈希文本

java - MessageDigest.update(byte[]) 是做什么的?

java - DigestUtils 和 MessageDigest 的 MD5 结果不同

c - 给定 n,求加起来得到 n 的最大数