哈希是什么?

9

我正在学习MD5。在大多数关于MD5的描述中,我发现了一个术语“哈希”。我谷歌了一下“哈希”,但是我没有在计算机编程中找到确切的“哈希”术语。

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


18
Hash是一种由切成细长条状(比薯条小但比例相似)的土豆块,然后在动物或植物油中煎至棕色、黏在一起并熟透的早餐食品。类比地,将数字“making a hash”表示为使用某种方法将其转化为不可识别的其他数字,但仍然依赖于输入数字。我没有引用资料,这就是我在80年代听到该类比时的理解。尽管如此,肯定有人在该术语首次应用时见证了它的出现。 - Heath Hunnicutt
7个回答

10

我认为任何答案都只能是猜测,因此我将把这个问题变成一个社区维基。

哈希(Hash)或者哈希褐色,是一种早餐食品,它由将土豆切成长条状(比薯条要小,且更短,但比例相似),然后在动物或植物油中煎炸直至变成棕色的一团,并一起煮熟而制成。类比地,“哈希”一个数字意味着使用一种方法将其转换为另一个通常较小的数字,但仍取决于输入数字的确定性。

我相信术语“哈希”最初是在“哈希表”这个上下文中使用的,这在1960年代的大型机上很常见。在这些情况下,通常会将具有大范围的整数值转换为“哈希表索引”,该索引是一个小整数。对于一个高效的哈希表来说,哈希函数的分布必须均匀或“平坦”。

我没有引用资料,但自从80年代听到这个类比以来,我就这样理解它。某人肯定曾经在首次应用这个术语时在场。


1
因此,字符串的“哈希值”将成为其在哈希表中的索引。 - Don
@Xinus,那个链接很棒,我也要试试。我想我甚至会采纳他的最终建议。哈哈 :-] - Heath Hunnicutt

7

哈希值(或简称哈希),也称为消息摘要,是从文本字符串生成的数字。哈希值相比文本字符串要小得多,并且通过一定的公式生成,以确保其他文本很难产生相同的哈希值。


1
等等,哈希值比实际文本要小?我的 MD5 函数一定有问题,它将 "hi" 转换成了 49f68a5c8493ec2c0bf489821c21fc3b。 - Omar
啊...所以哈希值 = 哈希 = 消息摘要。它们都一样吗? - Moon
@Omar,哈希函数通常将任意大小的数据转换为固定大小的数据,因此哈希函数的输出长度将始终相同,无论输入长度如何。但是,这个“规则”也有例外,请参见哈希函数的维基百科文章中的“定义范围”部分。 - user8554766

3
你在提到"哈希函数"。它被用来为给定的参数集生成唯一值。
哈希函数的一个很好的用途是密码安全。不需要将密码明文保存在数据库中,而是保存密码的哈希值。

3
一个哈希应该是从00到FF(十六进制)的值的独特组合,代表一定的数据,可以是文件或字节串。它主要用于密码存储和验证,以及测试文件是否与另一个文件相同(即,你对两个文件进行哈希,如果它们匹配,则它们是相同的文件)。
通常情况下,任何SHA算法都比MD5更受青睐,因为使用MD5可能会发生哈希冲突。详见这篇维基百科文章

2
哈希值不是唯一的,也不应该是唯一的。哈希值无法判断两个文件是否相同;如果哈希值匹配,则文件可能不同。哈希值用于判断文件是否不同;如果哈希值不同,则文件必定不同。 - Dour High Arch

1
补充gabriel1836的回答,哈希函数的一个重要属性是它是单向函数,这意味着你不能从哈希值生成原始字符串。

1
通常情况下,哈希并不像你所描述的那样安全。像java.lang.String使用的普通哈希很容易反转。你所说的是被称为“加密哈希”的哈希子集。 - Keith Randall

1

1

哈希函数将输入散列为一个值,需要一个盐值,而且不需要证明盐值。指示是每个人都说我们必须同时存储盐值,以便匹配和新的仍然可以工作。在数学上相关的概念是双射


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接