CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

高分求Delphi下的MD5算法。

楼主FigoZhu(谢慕安)2003-08-03 21:29:04 在 Delphi / Windows SDK/API 提问

高分求Delphi下的MD5算法。 问题点数:100、回复次数:6Top

1 楼huojiehai(海天子)回复于 2003-08-03 21:51:56 得分 0

帮你Uppppppppppppppp!Top

2 楼rwdx(忆)回复于 2003-08-03 21:57:01 得分 0

我有,可惜在家里,有空上网我再给你Top

3 楼rwdx(忆)回复于 2003-08-03 21:57:31 得分 50

对了,DELPHI6里的INDY控件中好像有那个MD5算法的控件Top

4 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-08-03 22:50:27 得分 50

/***   Source   Code   of   MD5   ***/    
  /     written   BY   upfeed[FCG]     /    
  /**************************/    
   
  下面的函数是计算核心,至于分组和填充部分就略去了。    
  ====================================================    
  参数说明:    
  AA,BB,CC,DD是摘要信息,一般初始化为    
  AA   :=   $67452301;    
  BB   :=   $EFCDAB89;    
  CC   :=   $98BADCFE;    
  DD   :=   $10325476;    
  MSGs是一个长64的LongWord数组,保存的就是要摘要的信息    
  ====================================================    
  procedure   TMainForm.MD5(var   AA,   BB,   CC,   DD:   LongWord;   MSGs:   array   of   LongWord);    
  var    
      A,   B,   C,   D:   LongWord;    
      T:   array[1..64]   of   LongWord;    
      i:   integer;    
   
  //没有循环左移的位运算,自己写一个    
      function   ROL(r:   LongWord;   bit:   byte):   LongWord;    
      var    
          ii:   byte;    
      begin    
          for   ii:=1   to   bit   do    
              if   r   and   $80000000   =   $80000000   then    
                  r   :=   (r   shl   1)   or   $01    
              else    
                  r   :=   (r   shl   1);    
          Result   :=   r;    
      end;    
   
  //四轮运算中的函数定义,也可以自行定义的    
      procedure   FF(var   a:   LongWord;   b,   c,   d:   LongWord;   k,   s,   i:   byte);    
      begin    
          a   :=   b   +   ROL((a   +   ((b   and   c)   or   (not   b   and   d))   +   MSGs[k]   +   T[i]),   s);    
      end;    
      procedure   GG(var   a:   LongWord;   b,   c,   d:   LongWord;   k,   s,   i:   byte);    
      begin    
          a   :=   b   +   ROL((a   +   ((b   and   d)   or   (c   and   not   d))   +   MSGs[k]   +   T[i]),   s);    
      end;    
      procedure   HH(var   a:   LongWord;   b,   c,   d:   LongWord;   k,   s,   i:   byte);    
      begin    
          a   :=   b   +   ROL((a   +   (b   xor   c   xor   d)   +   MSGs[k]   +   T[i]),   s);    
      end;    
      procedure   II(var   a:   LongWord;   b,   c,   d:   LongWord;   k,   s,   i:   byte);    
      begin    
          a   :=   b   +   ROL((a   +   (c   xor   (b   or   not   d))   +   MSGs[k]   +   T[i]),   s);    
      end;    
       
  begin    
      fillchar(T,   sizeof(T),   0);    
   
  //常数数组的初始化,通常是这种形式,当然可以自己做手脚的    
      for   i:=1   to   64   do    
          T[i]   :=   Trunc(4294967296*abs(sin(i)));    
   
      A   :=   AA;   B   :=   BB;   C   :=   CC;   D   :=   DD;    
  //第一轮    
      FF(A,   B,   C,   D,   0,   7,   1);   FF(D,   A,   B,   C,   1,   12,   2);   FF(C,   D,   A,   B,   2,   17,   3);   FF(B,   C,   D,   A,   3,   22,   4);    
      FF(A,   B,   C,   D,   4,   7,   5);   FF(D,   A,   B,   C,   5,   12,   6);   FF(C,   D,   A,   B,   6,   17,   7);   FF(B,   C,   D,   A,   7,   22,   8);    
      FF(A,   B,   C,   D,   8,   7,   9);   FF(D,   A,   B,   C,   9,   12,10);   FF(C,   D,   A,   B,   10,17,11);   FF(B,   C,   D,   A,   11,22,12);    
      FF(A,   B,   C,   D,   12,7,13);   FF(D,   A,   B,   C,   13,12,14);   FF(C,   D,   A,   B,   14,17,15);   FF(B,   C,   D,   A,   15,22,16);    
   
  //第二轮    
      GG(A,   B,   C,   D,   1,   5,17);   GG(D,   A,   B,   C,   6,     9,18);   GG(C,   D,   A,   B,   11,14,19);   GG(B,   C,   D,   A,   0,   20,20);    
      GG(A,   B,   C,   D,   5,   5,21);   GG(D,   A,   B,   C,   10,   9,22);   GG(C,   D,   A,   B,   15,14,23);   GG(B,   C,   D,   A,   4,   20,24);    
      GG(A,   B,   C,   D,   9,   5,25);   GG(D,   A,   B,   C,   14,   9,26);   GG(C,   D,   A,   B,   3,   14,27);   GG(B,   C,   D,   A,   8,   20,28);    
      GG(A,   B,   C,   D,   13,5,29);   GG(D,   A,   B,   C,   2,     9,30);   GG(C,   D,   A,   B,   7,   14,31);   GG(B,   C,   D,   A,   12,20,32);    
   
  //第三轮    
      HH(A,   B,   C,   D,   5,   4,33);   HH(D,   A,   B,   C,   8,   11,34);   HH(C,   D,   A,   B,   11,16,35);   HH(B,   C,   D,   A,   14,23,36);    
      HH(A,   B,   C,   D,   1,   4,37);   HH(D,   A,   B,   C,   4,   11,38);   HH(C,   D,   A,   B,   7,   16,39);   HH(B,   C,   D,   A,   10,23,40);    
      HH(A,   B,   C,   D,   13,4,41);   HH(D,   A,   B,   C,   0,   11,42);   HH(C,   D,   A,   B,   3,   16,43);   HH(B,   C,   D,   A,   6,   23,44);    
      HH(A,   B,   C,   D,   9,   4,45);   HH(D,   A,   B,   C,   12,11,46);   HH(C,   D,   A,   B,   15,16,47);   HH(B,   C,   D,   A,   2,   23,48);    
   
  //第四轮    
      II(A,   B,   C,   D,   0,   6,49);   II(D,   A,   B,   C,   7,   10,50);   II(C,   D,   A,   B,   14,15,51);   II(B,   C,   D,   A,   5,   21,52);    
      II(A,   B,   C,   D,   12,6,53);   II(D,   A,   B,   C,   3,   10,54);   II(C,   D,   A,   B,   10,15,55);   II(B,   C,   D,   A,   1,   21,56);    
      II(A,   B,   C,   D,   8,   6,57);   II(D,   A,   B,   C,   15,10,58);   II(C,   D,   A,   B,   6,   15,59);   II(B,   C,   D,   A,   13,21,60);    
      II(A,   B,   C,   D,   4,   6,61);   II(D,   A,   B,   C,   11,10,62);   II(C,   D,   A,   B,   2,   15,63);   II(B,   C,   D,   A,   9,   21,64);    
   
      AA   :=   A   +   AA;    
      BB   :=   B   +   BB;    
      CC   :=   C   +   CC;    
      DD   :=   D   +   DD;    
  end;    
  Top

5 楼FigoZhu(谢慕安)回复于 2003-08-04 16:14:08 得分 0

能不能给一个完整的,直接能用的啊。多谢啦:)Top

6 楼r3(去留无意)回复于 2003-09-21 21:39:52 得分 0

这里有一个直接可以用的  
  http://www.szchance.com/gb/coretech/article_show.asp?ID=23Top

相关问题

  • Delphi & 算法 ?
  • 求PID算法(DELPHI)?
  • 100分求delphi的RSA算法源码,高手请进
  • Delphi算法请教一?
  • Delphi算法请教二?
  • 高分求算法!!
  • 500分求算法……
  • 高分求算法!
  • 高分求算法
  • 100分求算法

关键词

  • 算法
  • delphi
  • longword
  • md5
  • aa
  • bb
  • dd
  • cc
  • msgs
  • procedure

得分解答快速导航

  • 帖主:FigoZhu
  • rwdx
  • Eastunfail

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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