【发布时间】:2010-10-02 09:55:45
【问题描述】:
我的理解是哈希码和校验和是相似的东西——一个数值,为一个数据块计算,相对是唯一的。
即两个数据块产生相同数字哈希/校验和值的概率足够低,以至于在应用程序中可以忽略。
那么我们是否有两个词来表示同一事物,或者哈希码和校验和之间是否存在重要区别?
【问题讨论】:
-
总结以下答案:哈希码将输入减少到一个小数字,以最大限度地减少冲突的机会。另一方面,校验和将输入减少到一个小数字,从而最大限度地减少冲突的机会。您可以通过任意改写该描述来使一种声音与另一种声音不同。
-
@DanStahlke - 不,这不是下面的答案所说的。是的,它们都将输入减少到较小的数量。但是有很多很多方法可以做到,如何选择使用什么算法呢?这取决于你的目标。总结前两个答案:校验和的目标是“检测最常见的错误”。对于您的场景中“最常见”的任何错误,选择产生不同校验和的算法。如果您担心一个或两个位被切换,您可以选择一种算法来保证检测到该特定错误!这是一个非常具体的权衡。
-
@DanStahlke - 另一方面,哈希码涵盖了广泛的可能权衡。如果我们指的是用于制作哈希表的值,我们知道会有将发生冲突,而且很多。这是一个非常不同的权衡(比校验和)。我们正在尝试平均减少冲突。我们不保证任何事情。可能有一些输入仅相差一位,但产生相同的散列。这很好,如果平均我们得到散列值的良好分布。然而对于校验和来说是不可接受的。
标签: language-agnostic hash computer-science checksum