CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

能不能介绍一下md5加密算法(高分提问)

楼主Jovesky(飘忽的影)2002-04-27 14:10:06 在 VB / 基础类 提问

急需......请看我的   相关加密算法提问     均给高分!!!!!!!!!! 问题点数:100、回复次数:6Top

1 楼shawls(VB Fan)(QQ:9181729)回复于 2002-04-27 14:13:59 得分 100

MD5加密算法简介  
   
  一、算法实现(转载自绿色兵团)    
  1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果    
  是448。    
        即数据扩展至K*512+448位。即K*64+56个字节,K为整数。    
        具体补位操作:补一个1,然后补0至满足上述要求        
  2、补数据长度:    
        用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据    
  就被填    
        补成长度为512位的倍数。    
  3.   初始化MD5参数        
        四个32位整数   (A,B,C,D)   用来计算信息摘要,初始化使用的是十六进制表示    
  的数字    
              A=0X01234567    
              B=0X89abcdef    
              C=0Xfedcba98    
              D=0X76543210        
  4、处理位操作函数        
              X,Y,Z为32位整数。    
              F(X,Y,Z)   =   X&Y|NOT(X)&Z    
              G(X,Y,Z)   =   X&Z|Y¬(Z)    
              H(X,Y,Z)   =   X   xor   Y   xor   Z    
              I(X,Y,Z)   =   Y   xor   (X|not(Z))        
  5、主要变换过程:    
        使用常数组T[1   ...   64],   T[i]为32位整数用16进制表示,数据用16个32位的    
  整    
        数数组M[]表示。    
        具体过程如下:        
  /*   处理数据原文   */    
  For   i   =   0   to   N/16-1   do        
  /*每一次,把数据原文存放在16个元素的数组X中.   */    
  For   j   =   0   to   15   do    
  Set   X[j]   to   M[i*16+j].    
  end     /结束对J的循环    
  /*   Save   A   as   AA,   B   as   BB,   C   as   CC,   and   D   as   DD.   */    
  AA   =   A    
  BB   =   B    
  CC   =   C    
  DD   =   D        
  /*   第1轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   F(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   7   1]   [DABC   1   12   2]   [CDAB   2   17   3]   [BCDA   3   22   4]    
  [ABCD   4   7   5]   [DABC   5   12   6]   [CDAB   6   17   7]   [BCDA   7   22   8]    
  [ABCD   8   7   9]   [DABC   9   12   10]   [CDAB   10   17   11]   [BCDA   11   22   12]    
  [ABCD   12   7   13]   [DABC   13   12   14]   [CDAB   14   17   15]   [BCDA   15   22   16]        
  /*   第2轮*   */    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   G(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   1   5   17]   [DABC   6   9   18]   [CDAB   11   14   19]   [BCDA   0   20   20]    
  [ABCD   5   5   21]   [DABC   10   9   22]   [CDAB   15   14   23]   [BCDA   4   20   24]    
  [ABCD   9   5   25]   [DABC   14   9   26]   [CDAB   3   14   27]   [BCDA   8   20   28]    
  [ABCD   13   5   29]   [DABC   2   9   30]   [CDAB   7   14   31]   [BCDA   12   20   32]        
  /*   第3轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   H(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   5   4   33]   [DABC   8   11   34]   [CDAB   11   16   35]   [BCDA   14   23   36]    
  [ABCD   1   4   37]   [DABC   4   11   38]   [CDAB   7   16   39]   [BCDA   10   23   40]    
  [ABCD   13   4   41]   [DABC   0   11   42]   [CDAB   3   16   43]   [BCDA   6   23   44]    
  [ABCD   9   4   45]   [DABC   12   11   46]   [CDAB   15   16   47]   [BCDA   2   23   48]        
  /*   第4轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   I(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   6   49]   [DABC   7   10   50]   [CDAB   14   15   51]   [BCDA   5   21   52]    
  [ABCD   12   6   53]   [DABC   3   10   54]   [CDAB   10   15   55]   [BCDA   1   21   56]    
  [ABCD   8   6   57]   [DABC   15   10   58]   [CDAB   6   15   59]   [BCDA   13   21   60]    
  [ABCD   4   6   61]   [DABC   11   10   62]   [CDAB   2   15   63]   [BCDA   9   21   64]        
  /*   然后进行如下操作   */    
  A   =   A   +   AA    
  B   =   B   +   BB    
  C   =   C   +   CC    
  D   =   D   +   DD        
  end   /*   结束对I的循环*/    
  6、输出结果。  
   
   
                以上代码来自:   SourceCode   Explorer(源代码数据库)  
                        复制时间:   2002-04-27   14:11:47  
                        当前版本:   1.0.635  
                                作者:   Shawls  
                        个人主页:   Http://Shawls.Yeah.Net  
                            E-Mail:   ShawFile@163.Net  
                                    QQ:   9181729Top

2 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-04-27 14:18:39 得分 0

 
  MD5   加密算法简介  
  一、算法实现(转载自绿色兵团)    
  1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果    
  是448。    
        即数据扩展至K*512+448位。即K*64+56个字节,K为整数。    
        具体补位操作:补一个1,然后补0至满足上述要求        
  2、补数据长度:    
        用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据    
  就被填    
        补成长度为512位的倍数。    
  3.   初始化MD5参数        
        四个32位整数   (A,B,C,D)   用来计算信息摘要,初始化使用的是十六进制表示    
  的数字    
              A=0X01234567    
              B=0X89abcdef    
              C=0Xfedcba98    
              D=0X76543210        
  4、处理位操作函数        
              X,Y,Z为32位整数。    
              F(X,Y,Z)   =   X&Y|NOT(X)&Z    
              G(X,Y,Z)   =   X&Z|Y&not;(Z)    
              H(X,Y,Z)   =   X   xor   Y   xor   Z    
              I(X,Y,Z)   =   Y   xor   (X|not(Z))        
  5、主要变换过程:    
        使用常数组T[1   ...   64],   T[i]为32位整数用16进制表示,数据用16个32位的    
  整    
        数数组M[]表示。    
        具体过程如下:        
  /*   处理数据原文   */    
  For   i   =   0   to   N/16-1   do        
  /*每一次,把数据原文存放在16个元素的数组X中.   */    
  For   j   =   0   to   15   do    
  Set   X[j]   to   M[i*16+j].    
  end     /结束对J的循环    
  /*   Save   A   as   AA,   B   as   BB,   C   as   CC,   and   D   as   DD.   */    
  AA   =   A    
  BB   =   B    
  CC   =   C    
  DD   =   D        
  /*   第1轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   F(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   7   1]   [DABC   1   12   2]   [CDAB   2   17   3]   [BCDA   3   22   4]    
  [ABCD   4   7   5]   [DABC   5   12   6]   [CDAB   6   17   7]   [BCDA   7   22   8]    
  [ABCD   8   7   9]   [DABC   9   12   10]   [CDAB   10   17   11]   [BCDA   11   22   12]    
  [ABCD   12   7   13]   [DABC   13   12   14]   [CDAB   14   17   15]   [BCDA   15   22   16]        
  /*   第2轮*   */    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   G(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   1   5   17]   [DABC   6   9   18]   [CDAB   11   14   19]   [BCDA   0   20   20]    
  [ABCD   5   5   21]   [DABC   10   9   22]   [CDAB   15   14   23]   [BCDA   4   20   24]    
  [ABCD   9   5   25]   [DABC   14   9   26]   [CDAB   3   14   27]   [BCDA   8   20   28]    
  [ABCD   13   5   29]   [DABC   2   9   30]   [CDAB   7   14   31]   [BCDA   12   20   32]        
  /*   第3轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   H(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   5   4   33]   [DABC   8   11   34]   [CDAB   11   16   35]   [BCDA   14   23   36]    
  [ABCD   1   4   37]   [DABC   4   11   38]   [CDAB   7   16   39]   [BCDA   10   23   40]    
  [ABCD   13   4   41]   [DABC   0   11   42]   [CDAB   3   16   43]   [BCDA   6   23   44]    
  [ABCD   9   4   45]   [DABC   12   11   46]   [CDAB   15   16   47]   [BCDA   2   23   48]        
  /*   第4轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   I(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   6   49]   [DABC   7   10   50]   [CDAB   14   15   51]   [BCDA   5   21   52]    
  [ABCD   12   6   53]   [DABC   3   10   54]   [CDAB   10   15   55]   [BCDA   1   21   56]    
  [ABCD   8   6   57]   [DABC   15   10   58]   [CDAB   6   15   59]   [BCDA   13   21   60]    
  [ABCD   4   6   61]   [DABC   11   10   62]   [CDAB   2   15   63]   [BCDA   9   21   64]        
  /*   然后进行如下操作   */    
  A   =   A   +   AA    
  B   =   B   +   BB    
  C   =   C   +   CC    
  D   =   D   +   DD        
  end   /*   结束对I的循环*/    
  6、输出结果。    
   
  Top

3 楼wu_xiaoya(wu_xiaoya)回复于 2002-04-27 14:24:10 得分 0

MD5简单介绍  
  问题描述:    
   
   
  1、MD5:Message   Digest   version   5   (译作消息摘要)   RFC1321  
   
  2、用途:鉴权、IPSEC中的ESP和AH的鉴权功能,与HMAC合用。  
   
  3、历史:从MD4发展而来,降低了一些处理速度,修改一些地方,提高了可靠性。  
   
  4、简单介绍:  
  任意长度的数据变换为128bit的摘要,没有俩个消息可以产生一样的摘要,不可能找到一个消息使得他的摘要为指定值。即不可反推。RFC1321中有代码实现。  
   
  5、算法:  
  第一步:增加填充  
  增加padding使得数据长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512个填充bit,也就是说填充的个数为1-512。第一个bit为1,其余全部为0。(自描述padding的概念)  
  第二步:补足长度  
  将数据长度转换为64bit的数值,如果长度超过64bit所能表示的数据长度的范围,值保留最后64bit,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。也就是32bit的16倍的整数倍。在RFC1321中,32bit称为一个word。  
  第三步:初始化变量:  
  用到4个变量,分别为A、B、C、D,均为32bit长。初始化为:  
  A:   01   23   45   67  
  B:   89   ab   cd   ef  
  C:   fe   dc   ba   98  
  D:   76   54   32   10  
  第四步:数据处理:  
  首先定义4个辅助函数:  
  F(X,Y,Z)   =   XY   v   not(X)   Z  
  G(X,Y,Z)   =   XZ   v   Y   not(Z)  
  H(X,Y,Z)   =   X   xor   Y   xor   Z  
  I(X,Y,Z)   =   Y   xor   (X   v   not(Z))  
  其中:XY表示按位与,X   v   Y表示按位或,not(X)表示按位取反。xor表示按位异或。  
  函数中的X、Y、Z均为32bit。  
  定义一个需要用到的数组:T(i),i取值1-64,T(i)等于abs(sin(i))的4294967296倍的整数部分,i为弧度。  
  假设前三步处理后的数据长度为32*16*Nbit,处理部分伪码如下:  
  /*   Process   each   16-word   block.   */  
  For   i   =   0   to   N/16-1   do  
  /*   Copy   block   i   into   X.   */  
  For   j   =   0   to   15   do  
  Set   X[j]   to   M[i*16+j].  
  end   /*   of   loop   on   j   */  
  /*   Save   A   as   AA,   B   as   BB,   C   as   CC,   and   D   as   DD.   */  
  AA   =   A  
  BB   =   B  
  CC   =   C  
  DD   =   D  
  /*   Round   1.   */  
  /*   Let   [abcd   k   s   i]   denote   the   operation  
  a   =   b   +   ((a   +   F(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */  
  /*   Do   the   following   16   operations.   */  
  [ABCD   0   7   1]   [DABC   1   12   2]   [CDAB   2   17   3]   [BCDA   3   22   4]  
  [ABCD   4   7   5]   [DABC   5   12   6]   [CDAB   6   17   7]   [BCDA   7   22   8]  
  [ABCD   8   7   9]   [DABC   9   12   10]   [CDAB   10   17   11]   [BCDA   11   22   12]  
  [ABCD   12   7   13]   [DABC   13   12   14]   [CDAB   14   17   15]   [BCDA   15   22   16]  
  /*   Round   2.   */  
  /*   Let   [abcd   k   s   i]   denote   the   operation  
  a   =   b   +   ((a   +   G(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */  
  /*   Do   the   following   16   operations.   */  
  [ABCD   1   5   17]   [DABC   6   9   18]   [CDAB   11   14   19]   [BCDA   0   20   20]  
  [ABCD   5   5   21]   [DABC   10   9   22]   [CDAB   15   14   23]   [BCDA   4   20   24]  
  [ABCD   9   5   25]   [DABC   14   9   26]   [CDAB   3   14   27]   [BCDA   8   20   28]  
  [ABCD   13   5   29]   [DABC   2   9   30]   [CDAB   7   14   31]   [BCDA   12   20   32]  
  /*   Round   3.   */  
  /*   Let   [abcd   k   s   t]   denote   the   operation  
  a   =   b   +   ((a   +   H(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */  
  /*   Do   the   following   16   operations.   */  
  [ABCD   5   4   33]   [DABC   8   11   34]   [CDAB   11   16   35]   [BCDA   14   23   36]  
  [ABCD   1   4   37]   [DABC   4   11   38]   [CDAB   7   16   39]   [BCDA   10   23   40]  
  [ABCD   13   4   41]   [DABC   0   11   42]   [CDAB   3   16   43]   [BCDA   6   23   44]  
  [ABCD   9   4   45]   [DABC   12   11   46]   [CDAB   15   16   47]   [BCDA   2   23   48]  
  /*   Round   4.   */  
  /*   Let   [abcd   k   s   t]   denote   the   operation  
  a   =   b   +   ((a   +   I(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */  
  /*   Do   the   following   16   operations.   */  
  [ABCD   0   6   49]   [DABC   7   10   50]   [CDAB   14   15   51]   [BCDA   5   21   52]  
  [ABCD   12   6   53]   [DABC   3   10   54]   [CDAB   10   15   55]   [BCDA   1   21   56]  
  [ABCD   8   6   57]   [DABC   15   10   58]   [CDAB   6   15   59]   [BCDA   13   21   60]  
  [ABCD   4   6   61]   [DABC   11   10   62]   [CDAB   2   15   63]   [BCDA   9   21   64]  
  /*   Then   perform   the   following   additions.   (That   is   increment   each  
  of   the   four   registers   by   the   value   it   had   before   this   block  
  was   started.)   */  
  A   =   A   +   AA  
  B   =   B   +   BB  
  C   =   C   +   CC  
  D   =   D   +   DD  
  end   /*   of   loop   on   i   */  
  第五步:输出:  
  最后得到的ABCD为输出结果,共128bit。A为低位,D为高位。Top

4 楼shawls(VB Fan)(QQ:9181729)回复于 2002-04-27 14:25:21 得分 0

嘿,有人抄袭!  
  Top

5 楼rivershan(阿门)回复于 2002-04-27 14:33:55 得分 0

 
  MD5   加密算法简介  
  一、算法实现(转载自绿色兵团)    
  1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果    
  是448。    
        即数据扩展至K*512+448位。即K*64+56个字节,K为整数。    
        具体补位操作:补一个1,然后补0至满足上述要求        
  2、补数据长度:    
        用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据    
  就被填    
        补成长度为512位的倍数。    
  3.   初始化MD5参数        
        四个32位整数   (A,B,C,D)   用来计算信息摘要,初始化使用的是十六进制表示    
  的数字    
              A=0X01234567    
              B=0X89abcdef    
              C=0Xfedcba98    
              D=0X76543210        
  4、处理位操作函数        
              X,Y,Z为32位整数。    
              F(X,Y,Z)   =   X&Y|NOT(X)&Z    
              G(X,Y,Z)   =   X&Z|Y&not;(Z)    
              H(X,Y,Z)   =   X   xor   Y   xor   Z    
              I(X,Y,Z)   =   Y   xor   (X|not(Z))        
  5、主要变换过程:    
        使用常数组T[1   ...   64],   T[i]为32位整数用16进制表示,数据用16个32位的    
  整    
        数数组M[]表示。    
        具体过程如下:        
  /*   处理数据原文   */    
  For   i   =   0   to   N/16-1   do        
  /*每一次,把数据原文存放在16个元素的数组X中.   */    
  For   j   =   0   to   15   do    
  Set   X[j]   to   M[i*16+j].    
  end     /结束对J的循环    
  /*   Save   A   as   AA,   B   as   BB,   C   as   CC,   and   D   as   DD.   */    
  AA   =   A    
  BB   =   B    
  CC   =   C    
  DD   =   D        
  /*   第1轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   F(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   7   1]   [DABC   1   12   2]   [CDAB   2   17   3]   [BCDA   3   22   4]    
  [ABCD   4   7   5]   [DABC   5   12   6]   [CDAB   6   17   7]   [BCDA   7   22   8]    
  [ABCD   8   7   9]   [DABC   9   12   10]   [CDAB   10   17   11]   [BCDA   11   22   12]    
  [ABCD   12   7   13]   [DABC   13   12   14]   [CDAB   14   17   15]   [BCDA   15   22   16]        
  /*   第2轮*   */    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   G(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   1   5   17]   [DABC   6   9   18]   [CDAB   11   14   19]   [BCDA   0   20   20]    
  [ABCD   5   5   21]   [DABC   10   9   22]   [CDAB   15   14   23]   [BCDA   4   20   24]    
  [ABCD   9   5   25]   [DABC   14   9   26]   [CDAB   3   14   27]   [BCDA   8   20   28]    
  [ABCD   13   5   29]   [DABC   2   9   30]   [CDAB   7   14   31]   [BCDA   12   20   32]        
  /*   第3轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   H(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   5   4   33]   [DABC   8   11   34]   [CDAB   11   16   35]   [BCDA   14   23   36]    
  [ABCD   1   4   37]   [DABC   4   11   38]   [CDAB   7   16   39]   [BCDA   10   23   40]    
  [ABCD   13   4   41]   [DABC   0   11   42]   [CDAB   3   16   43]   [BCDA   6   23   44]    
  [ABCD   9   4   45]   [DABC   12   11   46]   [CDAB   15   16   47]   [BCDA   2   23   48]        
  /*   第4轮*/    
  /*   以   [abcd   k   s   i]表示如下操作    
  a   =   b   +   ((a   +   I(b,c,d)   +   X[k]   +   T[i])   <<<   s).   */    
  /*   Do   the   following   16   operations.   */    
  [ABCD   0   6   49]   [DABC   7   10   50]   [CDAB   14   15   51]   [BCDA   5   21   52]    
  [ABCD   12   6   53]   [DABC   3   10   54]   [CDAB   10   15   55]   [BCDA   1   21   56]    
  [ABCD   8   6   57]   [DABC   15   10   58]   [CDAB   6   15   59]   [BCDA   13   21   60]    
  [ABCD   4   6   61]   [DABC   11   10   62]   [CDAB   2   15   63]   [BCDA   9   21   64]        
  /*   然后进行如下操作   */    
  A   =   A   +   AA    
  B   =   B   +   BB    
  C   =   C   +   CC    
  D   =   D   +   DD        
  end   /*   结束对I的循环*/    
  6、输出结果。    
   
  Top

6 楼Jovesky(飘忽的影)回复于 2002-04-27 14:59:37 得分 0

SORRY   你们的回答都很好   问题是   现在   我怎么分分数........给最早回答的人吧  
   
  其他的人对不起了   下次   一定先考虑:)Top

相关问题

  • 能不能介绍一下base-64加密算法(高分提问)
  • 能不能介绍一下rsa加密算法(高分提问)
  • 谁能介绍一些加密算法
  • 加密算法!
  • 谁有好的加密算法介绍几个,在这里谢谢大家了!
  • 谁能介绍一个简单有效的字符串加密算法?
  • 求加密算法。
  • ~~~~~~~MD5加密算法~~~~~~
  • 求加密算法
  • md5加密算法

关键词

  • 加密算法
  • 数据
  • md5
  • 整数
  • 长度
  • 表示
  • xor
  • 操作

得分解答快速导航

  • 帖主:Jovesky
  • shawls

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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