网上流传的“MD5模块”计算错误的分析
2013-03-29 13:45
323 查看
现在的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语句:
Visual Basic code
?
应该改为
Visual Basic code
?
(即ByteCounter改为lngBytesBuffered)
【错误二】
文件计算的读取条件判断出错
DigestFileToHexStr(或者叫Md5_File_Calc)中
Visual Basic code
?
应该改为:
Visual Basic code
?
【经过多次测试,并与权威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}
但是,大部分(甚至包括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语句:
Visual Basic code
?
Visual Basic code
?
【错误二】
文件计算的读取条件判断出错
DigestFileToHexStr(或者叫Md5_File_Calc)中
Visual Basic code
?
Visual Basic code
?
当然,只有特定的长度才会触发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}
相关文章推荐
- 网上流传的微软面试逻辑题分析
- Python模块导入错误分析
- 基于网上流传的错误KMP算法优化代码的纠正
- 网上流传天龙 Server代码分析笔记 -01
- 示波器1M与50欧姆的作用(纠正网上流传的错误)
- 9.在数学计算或数字分析中,经常会用到计算两个数的最大公约数的问题。即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。
- Python导入模块时遇到的错误分析
- Python常见加密模块用法分析【MD5,sha,crypt模块】
- insmod加载模块错误分析
- 网上图书商城项目学习笔记-025分类管理模块分析及查询所有分类实现
- (转)网上流传的天龙源码框架分析之一 --- 客户端简单介绍
- 汇编闰年计算(自己写的,网上的那个经典有错误,而且仔细看代码,有错误)
- Silverlight中利用MEF进行模块注入时注入错误问题分析
- MD5 C# 网上常见的哪个有点小错误 少位了
- 关于网上流传的nginx文档的1个错误(nginx+tomcat日志记录真实IP)
- Chart: 计算X轴标签个数1 (错误的分析)
- 网上流传判断ArcEngine runtime是否安装的代码中的错误。
- 网上流传的天龙源码框架分析之一 --- 客户端简单介绍
- (转)网上流传的天龙源码框架分析之一 --- 客户端简单介绍