C# 二进制文件的MD5码

写客户端桌面程序,相信很多人都会碰到自动升级的问题,生成自动升级文件的时候需要对比文件的MD5码是否发生了改变,如果改变需要升级,如果没有改变则不需要升级。这次就说说关于MD5的生成。

最早的系统是用VS2010编译的,每次编译生成的MD5码都不一样,导致每次自动升级包都是全量升级,为了改变这种情况公司大神给出了解决方案,反编译DLL,然后自己对比反编译代码是否发生了改变,如果改变才会重新生成MD5,没有发生改变就不会重新生成MD5,这个对比逻辑还是比较麻烦的,其中也发现过一些问题,比如说,只改变属性或者只改变静态变量的赋值,这样的情况没有考虑到,没有对比逻辑,就会导致DLL改变了之后不会生成新的MD5,但是大体思路还是可行的,我们生产也应用了好久这样的方案。

       之后,有一次偶然发现,在VS2019上编译,使用下面这段代码生成MD5,相同代码多次编译,每次MD5都是一样的,就不用之前那么复杂的对比逻辑。不同机器上还是会有不同。

 oFileStream = new System.IO.FileStream(pathName, System.IO.FileMode.Open,
                      System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
                arrbytHashValue = oMD5Hasher.ComputeHash(oFileStream);

看来是微软对编译器做了升级,这次还测试了,相同的执行代码,在2010上每次执行的MD5码不一样,但是在2019上就是一样的。并且和FrameWork版本并不相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值