我的理解是,哈希码和校验和是类似的东西 - 为数据块计算的数值,即 相对地 独特的。

IE。两个数据块产生相同数字散列/校验和值的概率足够低,以至于在应用程序中可以忽略它。

那么,我们是否有两个词来表示同一事物,或者哈希码和校验和之间是否存在重要差异?

有帮助吗?

解决方案

我想说的是 校验和 是必然的 A 哈希码. 。然而,并非所有哈希码都能产生良好的校验和。

校验和有一个特殊的用途——它验证或 检查 数据的完整性(有些可以通过允许 纠错)。“好的”校验和很容易计算,并且可以检测多种类型的数据损坏(例如一个、两个、三个错误位)。

哈希码简单地描述了一个 数学函数 将数据映射到某个值。当用作数据结构中的索引方式时(例如哈希表),低冲突概率是可取的。

其他提示

有一个不同的目的他们每个人:

  • 列码设计的是随机的跨地域(尽量减少碰撞哈希表和诸).加密散列编码的设计也可以计算上不可行的。
  • 检查总的设计,以检测到的最常见的错误,在数据和往往是快速的计算(对于有效校验和快速流数据)。

在实践中,相同功能的经常良好的两个目的。特别是,强加密散列代码是一个很好的检验和(这几乎是不可能的,随机误将打破一个强大的散列函数),如果你可以负担得起的计算成本。

确实有一些区别:

  • 校验,只需要不同的时的输入是不同的(尽可能),但这几乎为重要的是,他们是快速的计算。
  • 哈希码(用于hashtables)具有相同的要求,此外,他们应该均匀分布在代码的空间,尤其是对的投入是相似的。
  • 加密散列有 很多 更严格的要求,即鉴于哈,你不能构建一个输入产生这一散列。计算时间涉及第二,根据applicatin它甚至可能是可取的散列为非常缓慢的计算(在为打击暴力攻击).

维基所说井:

  

校验函数来散列相关   功能,指纹,随机   功能,和加密散列   职能。然而,每个那些   概念有不同的应用   因此,不同的设计目标。   校验位和奇偶校验位   校验的特殊情况下,   适合于小数据块   (如社会安全号码,银行   账户号码,电脑的话,   单字节等)。一些   纠错码是基于   特别校验,不仅检测   常见的错误也让   原始数据在被恢复   某些情况下。

散列码和校验和都用来创建从一个数据项短数值。不同的是,校验和值应该改变,即使一个小的修改是将数据项进行。对于一个散列值,要求仅仅是真实世界数据项应具有不同的散列值。

一个明显的例子是字符串。一种用于字符串校验应包括每一个位,和秩序的问题。在另一方面的哈希码通常可以实现为有限长度的前缀的校验和。这将意味着,“aaaaaaaaaaba”将散列相同“aaaaaaaaaaab”,但哈希算法可以处理这种第w碰撞。

这些天,他们是可互换的,但在往昔天校验是一个非常简单的己技巧在您要添加所有的数据向上(通常以字节为单位)和粘性一个字节在端部与在该值..然后你倒是希望知道是否有任何的原始数据已被损坏。类似于校验位,而是用字节。

一个校验和可以防止意外的变化。

一个密码散列可防御很上进攻击者。

当你在电线上发送位,其可能会意外地发生一些比特要么翻转,或删除,或者插入。为了允许接收机检测(或有时纠正)这样的事故中,发送端使用的校验和。

但是,如果你认为是有人主动和智能化修改电线上的消息,并要防止这种攻击,那么使用密码散列(我忽略了加密签名的哈希,或使用辅助信道或这样,由于这个问题似乎不躲避到这一点)。

之间的差哈希码和校验和职能是,他们被设计用于不同的目的。

  • 校验是用来找出 如果 东西在输入有改变。

  • 哈希码是用来找出 如果 东西在输入已经改变了 有尽可能多的"距离"之间单独的散列码值为可能。

    此外,还有 可能会 进一步的要求,散列函数,反对这条规则,就像的能力以形成树木/集群/桶的散列码值早。

    如果你增加一些共同的初始化,你得到的概念现代加密/键的交流。


有关概率:

例如,可以假定输入数据实际上总是变化(100%的时间)。并且让我们假设你有一个"完美"哈/校的功能,产生有1位哈希/校验和价值。因此,你会得到不同的散列/校验和价值观,50%的时间,对于随机输入数据。

  • 如果完全1位在你的随机输入数据已经改变,你将能够探测到100%的时间,无论多么大的输入数据。

  • 如果2位在你的随机输入数据已经改变了,你的概率的检测"改变"除以2,因为这两种变化可以消除彼此,并没有哈希/校验和功能将检测,2位实际上是不同的输入数据。

    ...

这意味着,如果位数在输入数据是多次较大的比特数,在你的哈希/校验和价值,你的概率实际上得到不同的散列/校验和价值观,对于不同的输入值,会减少和 不是一成不变的.

我倾向于使用字校验和参考用于可用于的数据的文件或一块创建的代码(数字或其他)时检查的该文件或数据没有被破坏。最常见的用法我遇到是检查通过网络发送的文件没有被改变(有意或无意)。

  

虽然散列和校验和,它们都创建基于文件的内容的值相似,散列是不一样的   创建一个校验和。校验和是为了验证(检查)的   数据的完整性,并确定数据传输错误,而散列   被设计为创建数据的一个唯一的数字指纹。

来源:CompTIA的®安全+指南网络安全基础 - 第五版 - 马克Ciampa -page 191

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top