搜索
bottom↓
回复: 37

讨论:两段Bin的数据,什么算法可以校验不同(已解决)

[复制链接]

出0入0汤圆

发表于 2014-8-24 12:46:44 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-9-11 14:44 编辑

我要做一个Boot上位机程序!

因为我们平时编译的时候输出的文件名一般不会改动的,编译完后Bin文件会改变,我想做个Check Code,比如通过什么算法,产生一个Check Value,文件中的数据不一样了,CheckValue就会改变,这样能防止程序下载成不同版本的文件!

用什么算法Check Value相同的机率会最低呢?

出0入0汤圆

发表于 2014-8-24 12:50:48 | 显示全部楼层
一般的话CRC32就够了,不放心的话MD5

出0入0汤圆

发表于 2014-8-24 12:54:03 | 显示全部楼层
MD5。      

出0入0汤圆

 楼主| 发表于 2014-8-24 12:54:10 | 显示全部楼层
sunnyqd 发表于 2014-8-24 12:50
一般的话CRC32就够了,不放心的话MD5

因为代码是不相同的,怕整出来相同的check value!这样就会出问题!

出0入0汤圆

 楼主| 发表于 2014-8-24 12:54:40 | 显示全部楼层


MD5相同的机率会很小么?因为没有用过,所以不了解,呵呵

出0入0汤圆

发表于 2014-8-24 13:00:45 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 12:54
MD5相同的机率会很小么?因为没有用过,所以不了解,呵呵

CRC32是2^32分之一,MD5是2^128分之一,理论上,两个有用且功能有效文件的MD5重复的概率非常小,基本不可能

出0入0汤圆

发表于 2014-8-24 13:01:45 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 12:54
因为代码是不相同的,怕整出来相同的check value!这样就会出问题!

CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了

出0入0汤圆

 楼主| 发表于 2014-8-24 13:01:49 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:00
CRC32是2^32分之一,MD5是2^128分之一,理论上,两个有用且功能有效文件的MD5重复的概率非常小,基本不可 ...

嗯,如果是这样的话那我直接用CRC好了,因为K20里面带CRC的硬件,呵呵,谢谢啦!

出0入0汤圆

 楼主| 发表于 2014-8-24 13:02:47 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:01
CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了 ...

非常感谢!我就是担心它会出现重复的Check Code!

出0入0汤圆

发表于 2014-8-24 13:03:16 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 13:01
嗯,如果是这样的话那我直接用CRC好了,因为K20里面带CRC的硬件,呵呵,谢谢啦! ...

是呢,在汽车和一些工业标准里,要求用CRC32检查代码的完整性

出0入0汤圆

发表于 2014-8-24 13:04:42 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 13:02
非常感谢!我就是担心它会出现重复的Check Code!

重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能

出0入0汤圆

 楼主| 发表于 2014-8-24 13:07:44 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:04
重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能

只要重复机率不大,我就可以使用,呵呵!一直没搞过这块的东西!所以才会有疑问!

出0入0汤圆

发表于 2014-8-24 13:09:07 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 13:07
只要重复机率不大,我就可以使用,呵呵!一直没搞过这块的东西!所以才会有疑问! ...

我待会儿,中午睡觉起来发个贴子,我以前用过CRC32校验的,可供参考

出0入0汤圆

发表于 2014-8-24 13:16:21 | 显示全部楼层
太高深了。。。

出0入0汤圆

发表于 2014-8-24 13:26:38 | 显示全部楼层
MD5这么高大上的都来了

出0入0汤圆

发表于 2014-8-24 13:33:29 | 显示全部楼层
bluestone2012 发表于 2014-8-24 13:26
MD5这么高大上的都来了

嘿嘿,用在单片机的密码加密里面还是很好用的

出0入0汤圆

 楼主| 发表于 2014-8-24 13:55:46 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:09
我待会儿,中午睡觉起来发个贴子,我以前用过CRC32校验的,可供参考

OK,谢谢啦!

出0入0汤圆

发表于 2014-8-24 17:35:55 | 显示全部楼层

我的那个crc32.c可以参考一下,http://www.amobbs.com/thread-5592908-1-1.html

出0入0汤圆

 楼主| 发表于 2014-8-24 18:35:25 | 显示全部楼层
sunnyqd 发表于 2014-8-24 17:35
我的那个crc32.c可以参考一下,http://www.amobbs.com/thread-5592908-1-1.html

收到,谢谢!

出0入0汤圆

发表于 2014-8-24 19:20:20 | 显示全部楼层
Crc32,md5 algorithms 对文件进行完整性校验足够了.

出0入0汤圆

发表于 2014-8-24 19:22:49 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:04
重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能

              42亿分之一,怎么算的啊?

出0入0汤圆

发表于 2014-8-24 19:40:32 来自手机 | 显示全部楼层
sunnyqd 发表于 2014-8-24 13:01
CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了 ...

请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的

出0入0汤圆

发表于 2014-8-24 19:42:07 | 显示全部楼层
没用过校验,感觉好高深的感觉。

出0入0汤圆

发表于 2014-8-24 19:43:23 | 显示全部楼层
zhangchaoying 发表于 2014-8-24 19:22
42亿分之一,怎么算的啊?

重复概率2^32=42_9496_7296

出0入0汤圆

发表于 2014-8-24 19:44:03 | 显示全部楼层
wxfje 发表于 2014-8-24 19:40
请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的 ...

同问,怎么使用的?二位高手能否介绍下流程。

出0入0汤圆

发表于 2014-8-24 19:44:32 | 显示全部楼层
wxfje 发表于 2014-8-24 19:40
请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的 ...

刚上电时候,先运行bootloader,bootloader校验用户程序,校验通过,跳转到用户程序运行

出0入0汤圆

发表于 2014-8-24 19:45:34 | 显示全部楼层
浪里白条 发表于 2014-8-24 19:44
同问,怎么使用的?二位高手能否介绍下流程。

         同问,坐等~

出0入0汤圆

发表于 2014-8-24 19:45:41 | 显示全部楼层
浪里白条 发表于 2014-8-24 19:44
同问,怎么使用的?二位高手能否介绍下流程。

就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLASH空间的不同位置

出0入0汤圆

发表于 2014-8-24 19:47:12 | 显示全部楼层
sunnyqd 发表于 2014-8-24 19:45
就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLAS ...

原来如此,感谢高手的讲解。

出0入0汤圆

发表于 2014-8-24 20:55:56 | 显示全部楼层
sunnyqd 发表于 2014-8-24 19:45
就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLAS ...

那也就是说用户的应用程序在烧写之前就必须进行校验,那若是这样的话,在线升级程序时是最好操作的,这样理解没错吧
谢谢指教

出0入0汤圆

 楼主| 发表于 2014-8-24 20:56:33 | 显示全部楼层
浪里白条 发表于 2014-8-24 19:47
原来如此,感谢高手的讲解。

有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在安全性要求非常高的情况下(比如高铁、飞机之类的环境),需要使用代码校验,否则的话,可能在运行过程中会出问题!这个可以用在那种场合,上电先校验代码,代码校验错误,报警!

出0入0汤圆

 楼主| 发表于 2014-8-24 20:57:06 | 显示全部楼层
wxfje 发表于 2014-8-24 20:55
那也就是说用户的应用程序在烧写之前就必须进行校验,那若是这样的话,在线升级程序时是最好操作的,这样 ...

代码安全要求比较高的场合也会需要的!

出0入0汤圆

发表于 2014-8-24 21:01:40 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 20:56
有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在 ...

是的,不过我的应用场合是工业设备中的,概率非常小,但也会出现的

出0入0汤圆

发表于 2014-8-24 21:10:53 | 显示全部楼层
wangpengcheng 发表于 2014-8-24 20:56
有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在 ...

懂了,嘿嘿,这种关乎生命安全的对可靠性的要求确实不一样

出0入0汤圆

发表于 2014-8-24 21:11:13 | 显示全部楼层
sunnyqd 发表于 2014-8-24 21:01
是的,不过我的应用场合是工业设备中的,概率非常小,但也会出现的

能在每次上电都检测应用程序数据的地方,肯定不是一般的场合,看来您这技术定时很厉害了

出0入0汤圆

发表于 2014-8-24 21:15:57 | 显示全部楼层
wxfje 发表于 2014-8-24 21:11
能在每次上电都检测应用程序数据的地方,肯定不是一般的场合,看来您这技术定时很厉害了 ...

这个也不是,一般的应用都可以加的,尤其是有bootloader的情况,程序出错误的话,可以直接跳转到bootloader的程序下载部分,同时也方便了下载

出0入0汤圆

发表于 2014-8-24 21:20:53 | 显示全部楼层
sunnyqd 发表于 2014-8-24 21:15
这个也不是,一般的应用都可以加的,尤其是有bootloader的情况,程序出错误的话,可以直接跳转到bootload ...

最近也在做在线升级,但没有在上电的时候进行校验,看来这个方法可以采用,若在线升级失败就改用之前 的应用程序

出0入0汤圆

发表于 2014-8-24 21:22:15 | 显示全部楼层
wxfje 发表于 2014-8-24 21:20
最近也在做在线升级,但没有在上电的时候进行校验,看来这个方法可以采用,若在线升级失败就改用之前 的 ...

是的,两段程序 ping-pang操作,一些路由器里、机顶盒里估计是这样的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-30 13:18

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

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