搜索
bottom↓
回复: 12

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

[复制链接]

出500入203汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2017-9-29 10:34:50 | 显示全部楼层
crc的位数和Poly都有通用标准,给出这个说明,再不行给出代码。

CRC没有纠错能力。

CRC比你想的方式,防碰撞能力强。

根据数据长度,选择合适的位数和poly
比如
SD卡的命令部分数据只有10来字节,使用CRC7
SD卡的数据库一般都是512字节一个扇区,使用CRC32
DS18B20使用CRC8

出500入203汤圆

 楼主| 发表于 2017-9-29 10:45:22 | 显示全部楼层
aozima 发表于 2017-9-29 10:34
crc的位数和Poly都有通用标准,给出这个说明,再不行给出代码。

CRC没有纠错能力。

防碰撞能力这个我觉得可能是和校验和取反有区别的,因为CRC的计算比较复杂,我想不出典型的错误值,但是校验和取反就简单了,我能推算出比较简单的出错值,比如数据0X0F,0XF0,校验0X00;     数据0XF0,0X0F, 校验0X00。这个应该就是校验和取反的错误类型吧。
当时刚开始研究CRC的时候,看过很多资料的,记得有文档分析了CRC计算的过程,得出的结论是可以纠正一个错误位或者检测出几个错误位。
现在在网上搜索一下还是能找到不少关于CRC可以纠正少量错误的资料。是不是使用的是自己特制的CRC算法才能实现这个功能?标准的CRC算法没有这个特性?

出0入0汤圆

发表于 2017-9-29 11:06:09 | 显示全部楼层
你要的是什么安全性……? 如果按照我理解的安全性,安全性都是0,这两个做法都可以很容易构造出碰撞……

出0入0汤圆

发表于 2017-9-29 11:17:34 | 显示全部楼层
momo_li 发表于 2017-9-29 10:45
防碰撞能力这个我觉得可能是和校验和取反有区别的,因为CRC的计算比较复杂,我想不出典型的错误值,但是 ...

你在那找到CRC介绍说明文档?我只知道CRC只有判断数据是否错误的能了,不具备纠错能了。
并且,STM32带CRC硬件计算,哪有什么负责不负责,就算是软件CRC,也是用人家标准的CRC格式与代码,何必自己设计?

出500入203汤圆

 楼主| 发表于 2017-9-29 12:05:26 | 显示全部楼层
yangff 发表于 2017-9-29 11:06
你要的是什么安全性……? 如果按照我理解的安全性,安全性都是0,这两个做法都可以很容易构造出碰撞……  ...

自然是防止数据出错,完全避免是不可能的,CRC作为行业的通用做法,效果肯定是可以的,

出0入4汤圆

发表于 2017-9-29 12:05:44 来自手机 | 显示全部楼层
ECC算法是带纠错的,CRC没听说过能纠错

出500入203汤圆

 楼主| 发表于 2017-9-29 12:22:39 | 显示全部楼层
zqf441775525 发表于 2017-9-29 12:05
ECC算法是带纠错的,CRC没听说过能纠错

主要是纠错难度不小,能力有限,效果有限所以用的不多,特地谷歌了一下相关资料
http://google.dn833.com/patents/CN101232348B?cl=zh

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出500入203汤圆

 楼主| 发表于 2017-9-29 12:24:12 | 显示全部楼层
LearningASM 发表于 2017-9-29 11:17
你在那找到CRC介绍说明文档?我只知道CRC只有判断数据是否错误的能了,不具备纠错能了。
并且,STM32带CR ...

使用的平台比较多,MC9SXET的芯片,51的,ARM的,即使自带硬件CRC,一般也不用。

出0入10汤圆

发表于 2017-9-29 19:39:02 | 显示全部楼层
crc强。一个字节错2比特,校验和没法检出

出0入0汤圆

发表于 2017-9-30 09:45:54 | 显示全部楼层
CRC16校验就用ModbusRTU的,这个是标准的,客户不懂自己去搜就行了,网上大把的说明和例子

出0入0汤圆

发表于 2017-9-30 12:16:41 | 显示全部楼层
以前选数据通讯原理,印象中CRC是经过理论分析出来,生成多项式是有意义的,所以在通讯中用CRC对出错的检验要更好

出0入0汤圆

发表于 2017-10-3 17:44:02 来自手机 | 显示全部楼层
你还是用crc吧,给个代码,给几个事例,ok了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 00:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表