CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

哪位大兄弟有MD5 hash算法的VC6源代码?

楼主wangfeng(【我想要飞专用马甲】)2001-06-08 09:40:00 在 VC/MFC / 图形处理/算法 提问

问题点数:31、回复次数:20Top

1 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 09:41:00 得分 0

?????????Top

2 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 10:09:00 得分 0

?????????Top

3 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 10:37:00 得分 0

??????Top

4 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 10:39:00 得分 0

一定要VC的Top

5 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 10:54:00 得分 0

没有人会吗Top

6 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:01:00 得分 0

没有人会吗?Top

7 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:01:00 得分 0

没有人会吗?Top

8 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:01:00 得分 0

没有人会吗?Top

9 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:01:00 得分 0

没有人会吗?Top

10 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:02:00 得分 0

没有人会吗?Top

11 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:06:00 得分 0

大家都对了,哎,我来晚了   Top

12 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 11:14:00 得分 0

大家都对了,哎,我来晚了   Top

13 楼ydogg(灰毛兔频频)回复于 2001-06-08 12:30:00 得分 0

我有,但是在公司.过几天给你.  
  邮箱.  
  一个md5.h文件.Top

14 楼bzshow(风人)回复于 2001-06-08 12:42:00 得分 1

http://www.codetools.com/cpp/cmd5.aspTop

15 楼bzshow(风人)回复于 2001-06-08 12:43:00 得分 0

http://www.codetools.com/file/logit.aspTop

16 楼bzshow(风人)回复于 2001-06-08 12:44:00 得分 30

http://www.codeguru.com/algorithms/md5.shtmlTop

17 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 14:49:00 得分 0

好心人呀!  
  好吧,我试试看!Top

18 楼wangfeng(【我想要飞专用马甲】)回复于 2001-06-08 14:50:00 得分 0

okTop

19 楼wagnerwash()回复于 2001-06-11 13:20:00 得分 0

/*  
  MD5报文摘要算法  
  发明者:Ron   Rivest  
  编码:万申  
  */  
  #include   "stdafx.h"  
   
  #include   <string.h>  
   
  #include   "MD5.h"  
   
  /*  
  Transform函数完成MD5算法的一次散列,  
  使用明文的一个512位(64字节)分组,把上一次散列的128位(16字节)散列值加上再次散列的值  
  共进行4轮,每轮16步操作,共64步  
  每步操作中使用的4字节常数t(i)可以自行选择,  
  在这里t(i)=int(pow(2,32)*abs(sin(i))),i的单位是弧度,从1到64  
  */  
  void   MD5Digest::Transform(Bit128   *Source,   const   DWORD   *   const   pSegment)  
  {  
  DWORD   A,   B,   C,   D;  
  A   =   Source->DWord[0];  
  B   =   Source->DWord[1];  
  C   =   Source->DWord[2];  
  D   =   Source->DWord[3];  
   
  /*   第1轮   */  
  FF(A,   B,   C,   D,   pSegment[   0],     7,   0xd76aa478);  
  FF(D,   A,   B,   C,   pSegment[   1],   12,   0xe8c7b756);  
  FF(C,   D,   A,   B,   pSegment[   2],   17,   0x242070db);  
  FF(B,   C,   D,   A,   pSegment[   3],   22,   0xc1bdceee);  
  FF(A,   B,   C,   D,   pSegment[   4],     7,   0xf57c0faf);  
  FF(D,   A,   B,   C,   pSegment[   5],   12,   0x4787c62a);  
  FF(C,   D,   A,   B,   pSegment[   6],   17,   0xa8304613);  
  FF(B,   C,   D,   A,   pSegment[   7],   22,   0xfd469501);  
  FF(A,   B,   C,   D,   pSegment[   8],     7,   0x698098d8);  
  FF(D,   A,   B,   C,   pSegment[   9],   12,   0x8b44f7af);  
  FF(C,   D,   A,   B,   pSegment[10],   17,   0xffff5bb1);  
  FF(B,   C,   D,   A,   pSegment[11],   22,   0x895cd7be);  
  FF(A,   B,   C,   D,   pSegment[12],     7,   0x6b901122);  
  FF(D,   A,   B,   C,   pSegment[13],   12,   0xfd987193);  
  FF(C,   D,   A,   B,   pSegment[14],   17,   0xa679438e);  
  FF(B,   C,   D,   A,   pSegment[15],   22,   0x49b40821);  
   
  /*   第2轮   */  
  GG(A,   B,   C,   D,   pSegment[   1],     5,   0xf61e2562);  
  GG(D,   A,   B,   C,   pSegment[   6],     9,   0xc040b340);  
  GG(C,   D,   A,   B,   pSegment[11],   14,   0x265e5a51);  
  GG(B,   C,   D,   A,   pSegment[   0],   20,   0xe9b6c7aa);  
  GG(A,   B,   C,   D,   pSegment[   5],     5,   0xd62f105d);  
  GG(D,   A,   B,   C,   pSegment[10],     9,   0x02441453);  
  GG(C,   D,   A,   B,   pSegment[15],   14,   0xd8a1e681);  
  GG(B,   C,   D,   A,   pSegment[   4],   20,   0xe7d3fbc8);  
  GG(A,   B,   C,   D,   pSegment[   9],     5,   0x21e1cde6);  
  GG(D,   A,   B,   C,   pSegment[14],     9,   0xc33707d6);  
  GG(C,   D,   A,   B,   pSegment[   3],   14,   0xf4d50d87);  
  GG(B,   C,   D,   A,   pSegment[   8],   20,   0x455a14ed);  
  GG(A,   B,   C,   D,   pSegment[13],     5,   0xa9e3e905);  
  GG(D,   A,   B,   C,   pSegment[   2],     9,   0xfcefa3f8);  
  GG(C,   D,   A,   B,   pSegment[   7],   14,   0x676f02d9);  
  GG(B,   C,   D,   A,   pSegment[12],   20,   0x8d2a4c8a);  
   
  /*   第3轮   */  
  HH(A,   B,   C,   D,   pSegment[   5],     4,   0xfffa3942);  
  HH(D,   A,   B,   C,   pSegment[   8],   11,   0x8771f681);  
  HH(C,   D,   A,   B,   pSegment[11],   16,   0x6d9d6122);  
  HH(B,   C,   D,   A,   pSegment[14],   23,   0xfde5380c);  
  HH(A,   B,   C,   D,   pSegment[   1],     4,   0xa4beea44);  
  HH(D,   A,   B,   C,   pSegment[   4],   11,   0x4bdecfa9);  
  HH(C,   D,   A,   B,   pSegment[   7],   16,   0xf6bb4b60);  
  HH(B,   C,   D,   A,   pSegment[10],   23,   0xbebfbc70);  
  HH(A,   B,   C,   D,   pSegment[13],     4,   0x289b7ec6);  
  HH(D,   A,   B,   C,   pSegment[   0],   11,   0xeaa127fa);  
  HH(C,   D,   A,   B,   pSegment[   3],   16,   0xd4ef3085);  
  HH(B,   C,   D,   A,   pSegment[   6],   23,   0x04881d05);  
  HH(A,   B,   C,   D,   pSegment[   9],     4,   0xd9d4d039);  
  HH(D,   A,   B,   C,   pSegment[12],   11,   0xe6db99e5);  
  HH(C,   D,   A,   B,   pSegment[15],   16,   0x1fa27cf8);  
  HH(B,   C,   D,   A,   pSegment[   2],   23,   0xc4ac5665);  
   
  /*   第4轮   */  
  II(A,   B,   C,   D,   pSegment[   0],     6,   0xf4292244);  
  II(D,   A,   B,   C,   pSegment[   7],   10,   0x432aff97);  
  II(C,   D,   A,   B,   pSegment[14],   15,   0xab9423a7);  
  II(B,   C,   D,   A,   pSegment[   5],   21,   0xfc93a039);  
  II(A,   B,   C,   D,   pSegment[12],     6,   0x655b59c3);  
  II(D,   A,   B,   C,   pSegment[   3],   10,   0x8f0ccc92);  
  II(C,   D,   A,   B,   pSegment[10],   15,   0xffeff47d);  
  II(B,   C,   D,   A,   pSegment[   1],   21,   0x85845dd1);  
  II(A,   B,   C,   D,   pSegment[   8],     6,   0x6fa87e4f);  
  II(D,   A,   B,   C,   pSegment[15],   10,   0xfe2ce6e0);  
  II(C,   D,   A,   B,   pSegment[   6],   15,   0xa3014314);  
  II(B,   C,   D,   A,   pSegment[13],   21,   0x4e0811a1);  
  II(A,   B,   C,   D,   pSegment[   4],     6,   0xf7537e82);  
  II(D,   A,   B,   C,   pSegment[11],   10,   0xbd3af235);  
  II(C,   D,   A,   B,   pSegment[   2],   15,   0x2ad7d2bb);  
  II(B,   C,   D,   A,   pSegment[   9],   21,   0xeb86d391);  
   
  Source->DWord[0]   +=   A;  
  Source->DWord[1]   +=   B;  
  Source->DWord[2]   +=   C;  
  Source->DWord[3]   +=   D;  
  }  
   
  /*  
  GetDigest函数对任意给定长度Len的字节串pSource进行单向散列,  
  结果保存在一个128位(16字节)的散列值Result中。  
   
  明文将被填充以使其位长度为一个比512(64字节)的倍数小64位(8字节)的数。  
  填充的位串是一个1后跟着若干个0。  
  然后在填充后的明文后附上64位(8字节)的明文长度。  
  形成一个长度是512(64字节)整数倍的待散列串。并确保不同的明文被填充后不同。  
  待散列串每512位(64字节)为一个分组,每调用一次Transform函数散列一个分组。  
  (为避免大量分配内存,本算法是在散列完512的整数倍的位后再进行填充、散列最后的1或2个512位)  
  */  
  void   MD5Digest::GetDigest(Bit128   *Result,   const   void   *   const   pSource,   unsigned   long   Len)  
  {  
  const   char   *   const   strSource   =   (char   *)pSource;  
   
  Result->DWord[0]   =   0x67452301L;  
  Result->DWord[1]   =   0xefcdab89L;  
  Result->DWord[2]   =   0x98badcfeL;  
  Result->DWord[3]   =   0x10325476L;  
   
  unsigned   long   i;  
  for   (i   =   0;   i   +   64   <=   Len;   i   +=   64)  
  {  
  Transform(Result,   (DWORD*)(strSource   +   i));  
  } //for  
   
  unsigned   char   strTemp[64];  
  memcpy(strTemp,   strSource   +   i,   Len   -   i); //将剩余部分填充至strTemp  
   
  if   (Len   -   i   <=   56) //填充和长度信息在一字节内  
  {  
  if   (Len   -   i   <   56) //需要填充  
  {  
  strTemp[Len   -   i]   =   0x80; //填充一个'10000000'字节  
  memset(strTemp   +   Len   -   i   +   1,   0,   56   -   Len   +   i); //剩余部分填充0  
  } //if  
  *(unsigned   long   *)(strTemp   +   56)   =   Len; //最后8个字节填长度  
  Transform(Result,   (DWORD*)(strTemp));  
  }  
  else //填充和长度信息在两字节中  
  {  
  strTemp[Len   -   i]   =   0x80;  
  memset(strTemp   +   Len   -   i   +   1,   0,   64   -   Len   +   i);  
  Transform(Result,   (DWORD*)(strTemp));  
   
  memset(strTemp,   0,   56);  
  *(unsigned   long   *)(strTemp   +   56)   =   Len; //最后8个字节填长度  
  Transform(Result,   (DWORD*)(strTemp));  
  } //if   -   else  
  }Top

20 楼Eros()回复于 2001-06-12 09:19:00 得分 0

我有,加分先Top

相关问题

  • 求des加密算法的VC++环境下的源代码
  • 谁有中值滤波算法vc的源代码?可以发一份么?
  • 求助vc++下的自适应哈夫曼算法的源代码
  • 求VC源代码!
  • nurbs源代码(vc)
  • 有谁有GSM算法的VC++程序源代码?急急急急急急急急!mailto:smz74@sina.com
  • 求扫雷VC源代码
  • 求扫雷VC源代码
  • 那位大哥有数据挖掘算法的源代码(c++)??
  • 谁有rsa算法的源代码,急,急,急...

关键词

  • 64位
  • 算法
  • source
  • psegment
  • md5
  • 填充
  • 散列
  • ff
  • 分组
  • 长度

得分解答快速导航

  • 帖主:wangfeng
  • bzshow
  • bzshow

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo