md5算法实现求助

arryang01 2005-05-18 10:06:51
我要用到md5算法,可是应用的时候遇到了一些问题,
md5是别人实现的,我再对它做测试时,
字符串的测试向量都没有问题,这说明md5实现没有有问题,
但对一个文件进行hash计算时,有的时候却与别人的不一样的,
对一个普通的文本文件,例如:文本内容是abc,等等,hash计算结构和别人的一样的,但针对二进制文件时,却出现了偏差,我的实现如下,高手帮我分析一下了

FILE *fp;
if((fp = fopen(szfilename, "rb")) ==NULL) return false;
int len = filelength(fileno(fp);
unsigned char * pBuf = new unsigned char[len];
if(pBuf == NULL) return false;

MD5_CTX context;
md5_update(&context, pBuf, len);
.....

请问,这样对文件hash有何错误?高手指教

...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Beover1984 2005-05-23
  • 打赏
  • 举报
回复
所以让你把程序发我邮箱里和我以前的程序对比一下
arryang01 2005-05-18
  • 打赏
  • 举报
回复
楼上的说的有道理,但哪位知道更确切的?

上边写的代码有点问题,现在修正如下:

FILE *fp;
if((fp = fopen(szFileName, "rb")) == NULL) return -1;
int nLen=filelength(fileno(fp));
unsigned char* pBuf=new unsigned char[nLen];
fread(pBuf, sizeof(char), nLen, fp);
fclose(fp);

MD5_CTX context;

MD5Init (&context);
MD5Update (&context, pBuf, nLen);
MD5Final (&context);

delete []pBuf;
darkstar21cn 2005-05-18
  • 打赏
  • 举报
回复
我记得md5是针对可见字符的加密算法。对2进制可能会有问题。
arryang01 2005-05-18
  • 打赏
  • 举报
回复
楼上的二位可能误解了我的意思,对于字符串,我的md5计算对字符串是正确的,我现在有问题是:在对文件进行md5计算时与别人的有出入,我不知道问题会出在哪里,上述代码肯定有问题的,

我的md5通过了下边的测试向量:
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a
XTAC 2005-05-18
  • 打赏
  • 举报
回复
我研究过RFC文档中的MD5算法
xtac@163.com
Beover1984 2005-05-18
  • 打赏
  • 举报
回复
我以前整理过RFC文档中的MD5算法,你把你的MD5程序发过来(编译好的就行)我拿两个对比一下看看
beover1984@163.com
Beover1984 2005-05-18
  • 打赏
  • 举报
回复
是不是和0xd,0xa有关系,C中的文件函数在写文件时会把'\n'变成0xd 0xa写到文件中,介读出来时把0xd 0xa转换成'\n'

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧