我见过8位,16位和32位的CRCs。
在什么时候需要跳到更宽的CRC?
我的直觉反应是基于数据长度:
编辑:看看维基百科关于CRC和Lott的答案,这里有:
<64字节:8位CRC
<16K字节:16位CRC
<512 m字节:32位CRC
发布于 2018-04-25 06:38:49
下面是对CRC-N http://www.backplane.com/matt/crc64.html的一个很好的“真实世界”评估。
我使用CRC-32和文件大小的比较,从来没有,在数十亿的文件检查,运行一个匹配的CRC-32和文件大小的冲突。但我知道有一些存在,而不是故意强迫存在的。(被黑的诡计/利用)
在进行比较时,您还应该检查“数据大小”。在正确的大小范围内,很少会有相同的数据大小与匹配的CRC发生冲突。
故意操纵的数据,为了伪造匹配,通常通过添加额外的数据来完成,直到CRC匹配目标为止。然而,这会导致数据大小不再匹配。试图暴力,或循环随机,或序列数据,同样的大小,将留下一个真正狭窄的碰撞率。
您还可以在数据大小内发生冲突,只需要使用公式的一般限制,以及使用位/字节和基-10系统的约束,这取决于浮点值,浮点值会被截断和剪短。
当你开始看到许多无法“确认”为“原始”的碰撞时,你会想要把它变大。(当它们具有相同的数据大小时,(当向后测试时,它们有一个匹配的CRC )。反向/字节或反向/位,或位偏移)
无论如何,它永远不应该被用作唯一的比较形式,仅仅作为一种快速的比较形式,用于索引。
您可以使用CRC-8索引整个互联网,并将所有的东西分成一个N-链接。你想要那些碰撞。现在,那些预先排序,你只需要检查一个N目录,寻找“文件大小”,或“反向CRC”,或任何其他比较,你可以做的小数据集,快速.
在同一个数据块上前后执行CRC-32比在一个方向上使用CRC-64更可靠。(或者是MD5。)
https://stackoverflow.com/questions/2321676
复制相似问题