【问题标题】:What is hash exactly?哈希到底是什么?
【发布时间】:2009-11-15 04:57:33
【问题描述】:

我正在学习 MD5。我在 MD5 的大多数描述中发现了一个术语“哈希”。我用谷歌搜索了“哈希”,但在计算机编程中找不到“哈希”的确切术语。

为什么我们在计算机编程中使用“哈希”?词源是什么??

【问题讨论】:

  • 哈希是早餐食品,将土豆切成细长的条(比炸薯条小,短,但比例相似),然后用动物或植物脂肪煎至焦黄,粘在一起,煮熟。以此类推,从一个数字中“制作哈希”意味着使用一种仍然以某种方式依赖于输入数字的方法变成一个无法识别的其他数字。我没有引用,自从我在 80 年代听到这个类比以来,我就是这样理解的。不过,在第一次应用该术语时,一定有人在场。

标签: hash md5


【解决方案1】:

我会说任何答案都必须是猜测,所以我会将其设为社区 wiki。

哈希或薯饼是早餐食品,将土豆切成细长的条(比炸薯条小,更短,但比例相似),然后用动物或植物脂肪油炸大量条直至变成褐色,粘在一起,并煮熟。以此类推,“散列”一个数字意味着使用仍然确定性地取决于输入数字的方法将其转换为另一个通常更小的数字。

我相信“哈希”一词最初是在“哈希表”的上下文中使用的,它在 1960 年代在大型机类型的机器上普遍使用。在这些情况下,通常将一个范围较大的整数值转换为一个“哈希表索引”,它是一个小整数。对于高效的哈希表来说,“哈希函数”必须均匀分布,或者说“平坦”。

我没有引用,这就是我在 80 年代听到这个类比时的理解方式。不过,在第一次应用该术语时,一定有人在场。

【讨论】:

  • 因此字符串的“哈希”将是它在哈希表中的索引。
  • @Xinus,那个链接很棒,我也要去试试。我想我什至会接受他的最后建议。大声笑:-]
【解决方案2】:

散列值(或简称散列),也 称为消息摘要,是一个数字 从一串文本生成。这 哈希值远小于 文本本身,并由 以这样的方式公式,它是 极不可能,其他一些 text 将产生相同的哈希值。

【讨论】:

  • 等等,哈希值比实际文本小?我的 MD5 函数必须被破坏,它变成了 49f68a5c8493ec2c0bf489821c21fc3b
  • 啊...所以哈希值 = 哈希 = 消息最重要。他们都一样吗?
  • @Omar,散列函数通常将任意大小的数据变成固定大小的数据,这样散列函数的输出长度就会无论输入长度如何,都相同。不过,此“规则”也有例外,请参阅Wikipedia article on hash function 中的'Defined range' section
【解决方案3】:

您指的是"hash function"。它用于为给定的一组参数生成唯一值。

哈希的一大用途是密码安全。您无需将密码保存在数据库中,而是保存密码的哈希值。

【讨论】:

    【解决方案4】:

    散列应该是从 00 到 FF(十六进制)的值的唯一组合,它表示特定的数据,无论是文件还是字节串。它主要用于密码存储和验证,以及测试一个文件是否与另一个文件相同(即您对两个文件进行哈希处理,如果它们匹配,它们就是同一个文件)。

    一般来说,任何 SHA 算法都比 MD5 更受欢迎,因为使用它时可能会发生哈希冲突。见this Wikipedia article

    【讨论】:

    • 哈希不是唯一的,也不应该是唯一的。哈希无法判断两个文件是否相同;如果哈希匹配文件可能不同。哈希用于判断文件是否不同;如果哈希值不同,则文件必须不同。
    【解决方案5】:

    根据 Wikipedia article on hash functions,计算机编程艺术领域的 Donald Knuth 能够将哈希函数的概念追溯到 1953 年 Hans Peter Luhn 的 IBM 内部备忘录。

    只是为了好玩,这里是在Two Women in the Klondike: the Story of a Journey to the Gold Fields of Alaska (1899) 中引用的一段无意中听到的对话:

    他们必须整天保持哈希表运行才能养活我们。 'T将是一个短期的事情。

    【讨论】:

      【解决方案6】:

      散列函数将输入散列到一个值,需要 salt value 并且不需要存储证明盐。适应症是大家都说要存盐同时配和新的还可以。数学相关的概念是bijection

      【讨论】:

        【解决方案7】:

        添加到 gabriel1836 的回答中,哈希函数的重要属性之一是它是单向函数,这意味着您无法从其哈希值生成原始字符串。

        【讨论】:

        • 一般来说,哈希并不像你描述的那样安全。常规散列,如 java.lang.String 使用的散列,很容易反转。您正在谈论称为“加密哈希”的哈希子集。
        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 2020-09-21
        • 1970-01-01
        • 2013-03-24
        • 2013-08-26
        相关资源
        最近更新 更多