| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 780 人关注过本帖
标题:谁能帮我讲解一下MD5算法
只看楼主 加入收藏
yihai0494
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-5-5
收藏
 问题点数:0 回复次数:2 
谁能帮我讲解一下MD5算法
我看了很久都看不懂,大侠们帮忙,谢谢谢谢
搜索更多相关主题的帖子: 算法 讲解 
2007-08-25 21:41
aipb2008
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-6-1
收藏
得分:0 
[QUOTE]

MD5产生一个128位的HASH值,在经过一写初始树立后,将明文分成了512位的块,再将每一块分成16个32位的子块。算法的输出是4个32位的块,连接起来构成128位的HASH值。

  首先,将消息填充到比512的倍数少64位,填充时先向消息末尾填一个1,然后再填满0,然后后面再加上一个64位的消息长度的表示(不包括填充位)。这两步使消息长度恰好是512的倍数,同时保证不同消息在填充后仍不相同。

  初始化4个32位变量:

  A=0x01234567

  B=0x89abcdef

  C=0xfedcba98

  D=0x76543210

  这些变量成为链变量。

  然后,开始算法的主循环。这个循环对消息中所有的块都执行一次。将4个变量复制到不同的变量:a值为A,b值为B,c值为C,d值为D。

  主循环有4圈,都很相似。每圈使用一个不同的操作,重复16次。每个操作完成一个a,b,c和d中三个变量的非线性函数。然后,将结果与第四个变量、文本的一个子块和一个常数相加。然后,将结果混换左移一个可变值的位数,再将结果与a,b,c和d之一相加。最后用结果来代替a,b,c和d之一。

  共有4个非线性函数,每次操作使用一个,每圈都不相同。

  F(X,Y,Z)=(X∧Y)∨((「X)∧Z)

  G(X,Y,Z)=(X∧Z)∨(Y∧(「z))

  H(X,Y,Z)=X㈩Y㈩Z

  I(X,Y,Z)=Y㈩(X∧(「z))

  ㈩为异或,∧为与,∨为或,「为非

  如果Mi代表消息的第i个子块(0到15),而<<

  FF(a,b,c,d,Mj,s,ti)代表=a=b((a+F(b,c,d)+Mj+ti)<<

  GG(a,b,c,d,Mj,s,ti)代表=a=b((a+G(b,c,d)+Mj+ti)<<

  HH(a,b,c,d,Mj,s,ti)代表=a=b((a+H(b,c,d)+Mj+ti)<<

  II(a,b,c,d,Mj,s,ti)代表=a=b((a+I(b,c,d)+Mj+ti)<<

MD5的4圈(64步)为:

  第一圈:

  FF(d,a,b,c,M1,12,0xe8c7b756)

  FF(c,d,a,b,M2,17,0x242070db)

  FF(b,c,d,a,M3,22,0xclbdceee)

  FF(a,b,c,d,M4,7,0xf57c0faf)

  FF(d,a,b,c,M5,12,0x4787c62a)

  FF(c,d,a,b,M6,17,0xa8304613)

  FF(b,c,d,a,M7,22,0xfd469501)

  FF(a,b,c,d,M8,7,0x698098d8)

  FF(d,a,b,c,M9,12,0x8b44f7af)

  FF(c,d,a,b,M10,17,0xffff5bb1)

  FF(B,C,D,A,m11,22,0X895cd7be)

  FF(a,b,c,d,M12,7,0xf6b901122)

  FF(d,a,b,c,M13,12,0xfd987193)

  FF(c,d,a,b,M14,17,0xa6794383)

  FF(b,c,d,a,M15,22,0x49b40821)

  第二圈:

  GG(a,b,c,d,M1,5,0xf61e2562)

  GG(d,a,b,c,M6,9,0xc040b340)

  GG(c,d,a,b,M11,14,0x2b5e5a51)

  GG(b,c,d,a,M0,20,0xe9b6c7aa)

  GG(a,b,c,d,M5,5,0xd62f105d)

  GG(d,a,b,c,M10,9,0x02441453)

  GG(c,d,a,b,M15,14,0xd8ale681)

  GG(b,c,d,a,M4,20,0xe7d3fbc8)

  GG(a,b,c,d,M9,5,0x21elcde6)

  GG(d,a,b,c,M14,9.0xc33707d6)

  GG(c,d,a,b,M3,14,0xf4d50d87)

  GG(b,c,d,a,M8,20,0x45al4ed)

  GG(a,b,c,d,M13,5,0xa9e3e905)

  GG(d,a,b,c,M2,9,0xfcefaef8)

  GG(c,d,a,b,M7,14,0x676f02d9)

  GG(b,c,d,a,M12,20,0x8d2a4c8a)

  第三圈:

  HH(a,b,c,d,M5,4,0xfffa3942)

  HH(d,a,b,c,M8,11,0x8771f681)

  HH(c,d,a,b,M11,16,0x6d9d6122)

  HH(b,c,d,a,M14,23,0xfde5380c)

  HH(a,b,c,d,M1,4,0xa4beea44)

  HH(d,a,b,c,M4,11,0x4bdecfa9)

  HH(c,d,a,b,M7,16,0xf6bb4b60)

  HH(b,c,d,a,M10,23,0xbebfbc70)

  HH(a,b,c,d,M13,4,0x28967ec6)

  HH(d,a,b,c,M0,11,0xeaa127fa)

  HH(c,d,a,b,M3,16,0xd4ef3085)

  HH(b,c,d,a,M6,23,0x04881d05)

  HH(a,b,c,d,M9,4,0xd9d4d039)

  HH(d,a,b,c,M12,11,0xe6db99e5)

  HH(c,d,a,b,M15,16,0xlfa27cf8)

  HH(b,c,d,a,M2,23,0xc4ac5665)

  第四圈

  II(a,b,c,d,M0,6,0xf4292244)

  II(d,a,b,c,M7,10,0x432aff97)

  II(c,d,a,b,M14,15,0xab9423a7)

  II(b,c,d,a,M5,21,0xfc93a039)

  II(a,b,c,d,M12,6,0x655b59c3)

  II(d,a,b,c,M3,10,0x8f0ccc92)

  II(c,d,a,b,M10,15,0xffeff47d)

  II(b,c,d,a,M1,21,0x85845dd1)

  II(a,b,c,d,M8,6,0x6fa87e4f)

  II(d,a,b,c,M15,10,0xfe2ce6e0)

  II(c,d,a,b,M6,15,0xa3014314)

  II(b,c,d,a,M13,21,0x4e0811a1)

  II(a,b,c,d,M4,6,0xf7537e82)

  II(d,a,b,c,M11,10,0xbd3af235)

  II(c,d,a,b,M2,15,0x2ad7d2bb)

  II(b,c,d,a,M9,21,0xeb86d391)

  这些常数ti步,ti为2的32次方乘abs(sin(i))的整数部分,其中i为弧度。

  完成这些之后,a,b,c,d与A,B,C,D相加,算法开始处理下一块。最后的输出结果为A,B,C,D相连接。

  对MD5的密码分析表明,MD5还是比较安全的。


[/QUOTE]

找来的,也不是清楚,自己研究吧!


[glow=255,yellow,4]Fight to win or die...[/glow]
2007-08-26 14:08
yihai0494
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-5-5
收藏
得分:0 
回复:(aipb2008)[QUOTE]MD5产生一个128位的HASH值...
谢谢啦

天行健,君子以自强不息!
2007-09-07 19:03
快速回复:谁能帮我讲解一下MD5算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015401 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved