当前位置:  开发笔记 > 人工智能 > 正文

哈希码和校验和 - 有什么区别?

如何解决《哈希码和校验和-有什么区别?》经验,为你挑选了5个好方法。

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

即,产生相同数字散列/校验和值的两个数据块的概率足够低,以至于出于应用目的可以忽略它.

那么我们是否有两个单词用于相同的事情,或者哈希码和校验和之间是否存在重要差异?



1> Zach Scriven..:

我会说校验和 必然是一个哈希码.但是,并非所有哈希码都能成为良好的校验和.

校验和有一个特殊目的---它验证或检查数据的完整性(有些可以通过允许纠错来超越它)."好"校验和易于计算,并且可以检测多种类型的数据损坏(例如,一个,两个,三个错误位).

哈希码简单地描述了将数据映射到某个值的数学函数.当用作数据结构(例如哈希表)中的索引的手段时,期望低冲突概率.


我宁愿说:哈希码是校验和.
@gumbo:不,并非每个哈希码都是校验和.请参阅下面的MSalters中的字符串示例.
也许一个可以作为另一个使用,但考虑到它们有不同的设计目标,这只会混淆问题.

2> Rafał Dowgir..:

每个人背后都有不同的目的:

散列码 - 设计为在其域中随机(以最小化散列表中的冲突等).加密哈希码也被设计成在计算上不可逆转.

校验和 - 旨在检测数据中最常见的错误,并且通常可以快速计算(有效校验快速数据流).

在实践中,相同的功能通常对两种目的都有好处.特别是,加密强哈希码是一个很好的校验和(如果你能负担得起计算成本,那么随机错误几乎不可能破坏强哈希函数).



3> Michael Borg..:

确实存在一些差异:

当输入不同(尽可能频繁)时,校验和只需要不同,但它们的计算速度几乎同样重要.

散列码(用于散列表)具有相同的要求,此外它们应均匀分布在代码空间中,尤其是对于相似的输入.

密码散列有很多更严格的要求,即给定一个哈希,你不能构造产生这个哈希的输入.计算时间排在第二位,并且取决于应用程序,甚至可能希望散列计算非常慢(以便对抗强力攻击).



4> Jon Skeet..:

维基百科说得好:

校验和函数与散列函数,指纹,随机函数和加密散列函数有关.但是,每个概念都有不同的应用,因此具有不同的设计目标.校验位和奇偶校验位是校验和的特殊情况,适用于小块数据(例如社会保险号,银行帐号,计算机字,单字节等).一些纠错码基于特殊校验和,不仅可以检测常见错误,还可以在某些情况下恢复原始数据.


读完之后,我仍然想知道区别是什么.

5> MSalters..:

哈希码和校验和都用于从数据项创建短数值.不同之处在于校验和值应该更改,即使对数据项进行了少量修改也是如此.对于散列值,要求仅仅是真实世界数据项应具有不同的散列值.

一个明显的例子是字符串.字符串的校验和应包括每个位,并且顺序很重要.另一方面,哈希码通常可以实现为有限长度前缀的校验和.这意味着"aaaaaaaaaaba"会像"aaaaaaaaaaab"一样散列,但哈希算法可以处理这种冲突.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有