4字节CRC与普通校验和的安全性那个更好些?

2019-12-22 13:47发布

之前的通信一直使用的是CRC校验,只是为了确认数据的正确性,但是由于针对的客户不一样,经常要和客户接口或者换CPU平台,使用CRC校验算法每次都要说很多次才能沟通清楚。
听说CRC校验在特定条件下是可以修复出错的几个位,但是我们平时压根就用不到这么高大上的特性,只是确认一下数据的正确性,出错了就重新传输一下。
在这种情况下我考虑能不能使用计算更简单的校验和取反的方式,这样和客户沟通起来应该就跟容易了。
我的理解是,如果对10个四字节分别计算CRC和校验和的情况下,数据错误但是却通过校验的理论概率就是十分之一,因为10个四字节能表述的范围就是1个四字节的十倍,无论这个校验的四字节是怎么计算出来的,每个校验值都对应着10种数据值。
当然如果是简单的校验和就会有致命的缺陷,那就是如果数据和校验和全是0(总线出错,所有数据全部是0),简单的求和还是0,那么这个数据也会被认为是正确的,但是如果在计算校验和之后将校验和取反,就在一定程度上解决了这个问题。因为总线出问题全是1或者全是0的可能性比较大,其他的出错方式概率就很小了。
所以在不考虑数据出错修复的情况下,CRC和校验和取反的验证效果是不是一样的?
各位怎么看?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
momo_li
1楼-- · 2019-12-23 08:45
zqf441775525 发表于 2017-9-29 12:05
ECC算法是带纠错的,CRC没听说过能纠错

主要是纠错难度不小,能力有限,效果有限所以用的不多,特地谷歌了一下相关资料
http://google.dn833.com/patents/CN101232348B?cl=zh
momo_li
2楼-- · 2019-12-23 10:56
LearningASM 发表于 2017-9-29 11:17
你在那找到CRC介绍说明文档?我只知道CRC只有判断数据是否错误的能了,不具备纠错能了。
并且,STM32带CR ...

使用的平台比较多,MC9SXET的芯片,51的,ARM的,即使自带硬件CRC,一般也不用。
andrew8415
3楼-- · 2019-12-23 14:19
crc强。一个字节错2比特,校验和没法检出
modbus
4楼-- · 2019-12-23 16:22
CRC16校验就用ModbusRTU的,这个是标准的,客户不懂自己去搜就行了,网上大把的说明和例子
zhugean
5楼-- · 2019-12-23 22:06
 精彩回答 2  元偷偷看……
fiddly
6楼-- · 2019-12-24 01:38
你还是用crc吧,给个代码,给几个事例,ok了。

一周热门 更多>