MyException - 我的异常网
当前位置:我的异常网» VB » 【技术订正】用网上流传的“MD5模块”的千万要注意了

【技术订正】用网上流传的“MD5模块”的千万要注意了

www.myexceptions.net  网友分享于:2013-04-10  浏览:7次
【技术勘误】用网上流传的“MD5模块”的千万要注意了!
现在的MD5计算模块似乎有几种版本,
但是,大部分(甚至包括ASP的版本)存在【文件MD5计算不正确】的现象。
经过我的仔细检查,其中网上流传甚广的两个能计算文件的版本是错误的。
问题发生在计算一些具有特定文件/字符串大小的时候,问题出现几率很高。

举几个例子(百度上随机抽选的)
问题版本1:MD5函数为【Md5_[File/String]_Calc】
http://hi.baidu.com/xlsdg/item/b72dbbbe6adb7f40ba0e12dd
问题版本2:MD5函数为【Digest[File/String]ToHexStr】
http://www.programfan.com/article/772.html

其实,他们的源头都是这一个Robert Hubley的版本
http://www.hackhome.com/InfoView/Article_106283.html

【错误一】
MD5Final函数的一个If语句:

If lngBytesBuffered <= 56 Then
    MD5Update 56 - lngBytesBuffered, padding
Else
    MD5Update 120 - ByteCounter, padding
End If

应该改为

If lngBytesBuffered <= 56 Then
    MD5Update 56 - lngBytesBuffered, padding
Else
    MD5Update 120 - lngBytesBuffered, padding
End If

(即ByteCounter改为lngBytesBuffered)

【错误二】
文件计算的读取条件判断出错
DigestFileToHexStr(或者叫Md5_File_Calc)中
If Loc(1) < LOF(1) Then

应该改为:
If Loc(1) <= LOF(1) Then


【经过多次测试,并与权威MD5数据对比,修改后程序给出的MD5数据全部正确】

当然,只有特定的长度才会触发BUG(但是这个范围相当广).
以下是字符串函数的触发长度,包括了56,120-127,184-192....这些范围

集合法表示:字符串BUG长度集合={56}∪{x∈Z|x∈[64n-8,64n-1],2<n}

你自己也可以试试用(56字节)"12345678901234567890123456789012345678901234567890123456"计算,标准数据是49F193ADCE178490E34D1B3A4EC0064C,错误程序结果是29DC63DA78D43A804E8A4D4DCA707CC2

当使用文件函数时,因为问题二,导致长度等于64倍数的文件都会缺少一个字节进行MD5Transform,
即长度等于64倍数的文件也会触发BUG
因为与字符串计算用的是同一个出问题的MD5Final,所以,
集合法表示:文件BUG长度集合=字符串BUG长度集合∪{n∈Z|64n,1≤n}


希望能加精~
警醒使用网络上流传该类代码的人,以免造成大家的损失。

(转自本人'ydm_bd'百度贴吧原文.http://tieba.baidu.com/p/2088917195)
asp vb md5

------解决方案--------------------
还真是的,说的没错,我刚测了,确实存在问题,但我按楼主的方法改了,还是不对
------解决方案--------------------
呃,学习了~~MD5一直用系统提供的来写的,看来用网上的模块看来还真得注意啊……
------解决方案--------------------
谢谢分享!!
------解决方案--------------------
百度一下,你就上当。因为这些用百度的人愚不可及啊。
------解决方案--------------------
为何不用libmad5了
http://sourceforge.net/projects/libmd5/
------解决方案--------------------


发一个计算文件MD5,SHA1,CRC32的小工具( AAuto源码 ) - 可以用来比对正确的哈希值。

在IDE中新建文件粘贴下面的源码,然后按 F5 运行即可。               
AAuto最新版本下载 ( 仅 6.58MB,绿色不用安装,永久免费的桌面软件快速开发工具 )

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有