讨论:两段Bin的数据,什么算法可以校验不同(已解决)
本帖最后由 FSL_TICS_ZJJ 于 2014-9-11 14:44 编辑我要做一个Boot上位机程序!
因为我们平时编译的时候输出的文件名一般不会改动的,编译完后Bin文件会改变,我想做个Check Code,比如通过什么算法,产生一个Check Value,文件中的数据不一样了,CheckValue就会改变,这样能防止程序下载成不同版本的文件!
用什么算法Check Value相同的机率会最低呢? 一般的话CRC32就够了,不放心的话MD5 MD5。 sunnyqd 发表于 2014-8-24 12:50
一般的话CRC32就够了,不放心的话MD5
因为代码是不相同的,怕整出来相同的check value!这样就会出问题! stepby 发表于 2014-8-24 12:54
MD5。
MD5相同的机率会很小么?因为没有用过,所以不了解,呵呵 wangpengcheng 发表于 2014-8-24 12:54
MD5相同的机率会很小么?因为没有用过,所以不了解,呵呵
CRC32是2^32分之一,MD5是2^128分之一,理论上,两个有用且功能有效文件的MD5重复的概率非常小,基本不可能 wangpengcheng 发表于 2014-8-24 12:54
因为代码是不相同的,怕整出来相同的check value!这样就会出问题!
CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了 sunnyqd 发表于 2014-8-24 13:00
CRC32是2^32分之一,MD5是2^128分之一,理论上,两个有用且功能有效文件的MD5重复的概率非常小,基本不可 ...
嗯,如果是这样的话那我直接用CRC好了,因为K20里面带CRC的硬件,呵呵,谢谢啦! sunnyqd 发表于 2014-8-24 13:01
CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了 ...
非常感谢!我就是担心它会出现重复的Check Code! wangpengcheng 发表于 2014-8-24 13:01
嗯,如果是这样的话那我直接用CRC好了,因为K20里面带CRC的硬件,呵呵,谢谢啦! ...
是呢,在汽车和一些工业标准里,要求用CRC32检查代码的完整性 wangpengcheng 发表于 2014-8-24 13:02
非常感谢!我就是担心它会出现重复的Check Code!
重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能{:lol:} sunnyqd 发表于 2014-8-24 13:04
重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能
只要重复机率不大,我就可以使用,呵呵!一直没搞过这块的东西!所以才会有疑问! wangpengcheng 发表于 2014-8-24 13:07
只要重复机率不大,我就可以使用,呵呵!一直没搞过这块的东西!所以才会有疑问! ...
我待会儿,中午睡觉起来发个贴子,我以前用过CRC32校验的,可供参考 太高深了。。。 MD5这么高大上的都来了 bluestone2012 发表于 2014-8-24 13:26
MD5这么高大上的都来了
嘿嘿,用在单片机的密码加密里面还是很好用的{:tongue:} sunnyqd 发表于 2014-8-24 13:09
我待会儿,中午睡觉起来发个贴子,我以前用过CRC32校验的,可供参考
OK,谢谢啦! wangpengcheng 发表于 2014-8-24 13:55
OK,谢谢啦!
我的那个crc32.c可以参考一下,http://www.amobbs.com/thread-5592908-1-1.html sunnyqd 发表于 2014-8-24 17:35
我的那个crc32.c可以参考一下,http://www.amobbs.com/thread-5592908-1-1.html
收到,谢谢! Crc32,md5 algorithms 对文件进行完整性校验足够了.{:smile:} sunnyqd 发表于 2014-8-24 13:04
重复的概率是42亿分之一,比国内买彩票的概率还小,但不是不可能
42亿分之一,怎么算的啊?
sunnyqd 发表于 2014-8-24 13:01
CRC32重复的概率很小很小,我设计的产品有个上电校验环节,用CRC32检查代码的完整性,已经足够了 ...
请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的 没用过校验,感觉好高深的感觉。 zhangchaoying 发表于 2014-8-24 19:22
42亿分之一,怎么算的啊?
重复概率2^32=42_9496_7296 wxfje 发表于 2014-8-24 19:40
请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的 ...
同问,怎么使用的?二位高手能否介绍下流程。 wxfje 发表于 2014-8-24 19:40
请问下,您这个上电检验是怎样操作的,是把芯片内部flash的数据全部读出来校验呢还是其他的 ...
刚上电时候,先运行bootloader,bootloader校验用户程序,校验通过,跳转到用户程序运行 浪里白条 发表于 2014-8-24 19:44
同问,怎么使用的?二位高手能否介绍下流程。
同问,坐等~ 浪里白条 发表于 2014-8-24 19:44
同问,怎么使用的?二位高手能否介绍下流程。
就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLASH空间的不同位置 sunnyqd 发表于 2014-8-24 19:45
就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLAS ...
原来如此,感谢高手的讲解。 sunnyqd 发表于 2014-8-24 19:45
就是一块单片机有两套代码,一套是bootloader,另一套是实际的应用程序,分别烧写,分别编译的,占用FLAS ...
那也就是说用户的应用程序在烧写之前就必须进行校验,那若是这样的话,在线升级程序时是最好操作的,这样理解没错吧
谢谢指教 浪里白条 发表于 2014-8-24 19:47
原来如此,感谢高手的讲解。
有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在安全性要求非常高的情况下(比如高铁、飞机之类的环境),需要使用代码校验,否则的话,可能在运行过程中会出问题!这个可以用在那种场合,上电先校验代码,代码校验错误,报警! wxfje 发表于 2014-8-24 20:55
那也就是说用户的应用程序在烧写之前就必须进行校验,那若是这样的话,在线升级程序时是最好操作的,这样 ...
代码安全要求比较高的场合也会需要的! wangpengcheng 发表于 2014-8-24 20:56
有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在 ...
是的,不过我的应用场合是工业设备中的,概率非常小,但也会出现的 wangpengcheng 发表于 2014-8-24 20:56
有的时候单片机在正常使用过程中Flash可能会有一到两个地址坏掉了,当然,这种机率很小,但是也存在,在 ...
懂了,嘿嘿,这种关乎生命安全的对可靠性的要求确实不一样 sunnyqd 发表于 2014-8-24 21:01
是的,不过我的应用场合是工业设备中的,概率非常小,但也会出现的
能在每次上电都检测应用程序数据的地方,肯定不是一般的场合,看来您这技术定时很厉害了 wxfje 发表于 2014-8-24 21:11
能在每次上电都检测应用程序数据的地方,肯定不是一般的场合,看来您这技术定时很厉害了 ...
这个也不是,一般的应用都可以加的,尤其是有bootloader的情况,程序出错误的话,可以直接跳转到bootloader的程序下载部分,同时也方便了下载 sunnyqd 发表于 2014-8-24 21:15
这个也不是,一般的应用都可以加的,尤其是有bootloader的情况,程序出错误的话,可以直接跳转到bootload ...
最近也在做在线升级,但没有在上电的时候进行校验,看来这个方法可以采用,若在线升级失败就改用之前 的应用程序
wxfje 发表于 2014-8-24 21:20
最近也在做在线升级,但没有在上电的时候进行校验,看来这个方法可以采用,若在线升级失败就改用之前 的 ...
是的,两段程序 ping-pang操作,一些路由器里、机顶盒里估计是这样的
页:
[1]