Ric*_*ett 107 language-agnostic hash computer-science checksum
我的理解是哈希码和校验和是类似的东西 - 为数据块计算的数值,它是相对独特的.
即,产生相同数字散列/校验和值的两个数据块的概率足够低,以至于出于应用目的可以忽略它.
那么我们是否有两个单词用于相同的事情,或者哈希码和校验和之间是否存在重要差异?
Zac*_*ena 65
我会说校验和 必然是一个哈希码.但是,并非所有哈希码都能成为良好的校验和.
校验和有一个特殊目的---它验证或检查数据的完整性(有些可以通过允许纠错来超越它)."好"校验和易于计算,并且可以检测多种类型的数据损坏(例如,一个,两个,三个错误位).
哈希码简单地描述了将数据映射到某个值的数学函数.当用作数据结构(例如哈希表)中的索引的手段时,期望低冲突概率.
Raf*_*ird 40
每个人背后都有不同的目的:
在实践中,相同的功能通常对两种目的都有好处.特别是,加密强哈希码是一个很好的校验和(如果你能负担得起计算成本,那么随机错误几乎不可能破坏强哈希函数).
Mic*_*rdt 21
确实存在一些差异:
尽管散列和校验和的相似之处在于它们都基于文件的内容创建一个值,但散列与创建校验和不同。校验和旨在验证(检查)数据的完整性并识别数据传输错误,而散列旨在创建数据的唯一数字指纹。
来源:CompTIA ® Security+ 网络安全基础指南 - 第五版 - Mark Ciampa - 第 191 页
哈希码和校验和都用于从数据项创建短数值.不同之处在于校验和值应该更改,即使对数据项进行了少量修改也是如此.对于散列值,要求仅仅是真实世界数据项应具有不同的散列值.
一个明显的例子是字符串.字符串的校验和应包括每个位,并且顺序很重要.另一方面,哈希码通常可以实现为有限长度前缀的校验和.这意味着"aaaaaaaaaaba"会像"aaaaaaaaaaab"一样散列,但哈希算法可以处理这种冲突.
小智 5
哈希码和校验和函数之间的区别在于,它们是为不同的目的而设计的。
校验和用于查明输入中的某些内容是否已更改。
哈希码用于查明输入中的某些内容是否已更改,并在各个哈希码值之间保持尽可能大的“距离”。
此外,与此规则相反,对哈希函数可能还有进一步的要求,例如尽早形成哈希代码值的树/簇/桶的能力。
如果您添加一些共享的初始随机化,您就会了解现代加密/密钥交换的概念。
关于概率:
例如,假设输入数据实际上总是发生变化(100% 的时间)。假设您有一个“完美”的哈希/校验和函数,可以生成 1 位哈希/校验和值。因此,对于随机输入数据,您将在 50% 的情况下获得不同的哈希/校验和值。
如果随机输入数据中正好有 1 位发生了变化,那么无论输入数据有多大,您都能够 100% 地检测到这一变化。
如果随机输入数据中的 2 位发生了更改,则检测到“更改”的概率将除以 2,因为这两种更改可能会相互抵消,并且没有哈希/校验和函数会检测到输入数据中的 2 位实际上不同。
...
这意味着,如果输入数据中的位数比哈希/校验和值中的位数大几倍,则对于不同的输入值,实际获得不同哈希/校验和值的概率会降低,并且不是持续的。
校验和可防止意外更改。
加密哈希可以防止非常有动力的攻击者。
当您在线路上发送位时,可能会意外地发生某些位被翻转、删除或插入的情况。为了让接收方检测(或有时纠正)这样的事故,发送方使用校验和。
但是,如果您假设有人主动且智能地修改线路上的消息,并且您想防范此类攻击者,那么请使用加密散列(我忽略对散列进行加密签名,或使用辅助通道等,因为这个问题似乎并没有回避这一点)。
| 归档时间: |
|
| 查看次数: |
44115 次 |
| 最近记录: |