`
graduate
  • 浏览: 9112 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

MD5算法原理的说明

阅读更多
MD5算法原理的说明
鉴于目前网上关于MD5算法原理的说明文章实在太少 有的几篇 也大多晦涩难懂
于是决定写一篇适合初学者看的(一只:老大,你的初学者作何定义 一头:所
谓初学者 就是指那些才刚开始学的人 一只:吐血 !!!!!!!)

1.什么是MD5 :MD5 就是 Message(消息,信息) digest(消化,摘要) algorithm(运算法则) 翻译成普通话就是 信息摘要算法(一只:老大什么叫算法 一头:吐血 !!!!!!!! ) 在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来

2.md5是怎样进行加密的
这个要分步来讲 为了更好的明白 我们来举个例子来讲
如对一个字符串 "string" 进行加密 第一步 我们要把他转换成位 (MD5是对位进行操作) 假如你连什么叫位也不懂 那下面就不用看了 老大 讲是简明易懂 不还是天书嘛
现在ME们假设 string 转换为 位后 是 1010000101110101 当然肯定不是 ME在这里只是把他当作是 因为ME可没功夫再把这个字符串一个个的转成位 。
所以后面你就权当他是 这个字符串 转换 成位的样子就行了
往后呢 就要对这个字节串 (就是前面那个都是1和0的一老串 东西了)进行补位 至于怎么补 很简单只要使你的这个串的长度(有多少个1或者0就是有多长)补成比512的倍数(n倍)位少64位就成 当然这里的位不超过512 只要补到512少64位就成 补的规则嘛 很简单 就是在你的位后先补一个1 其它的补0 就成了 那么补位后 这个串变成 10100000101110101 1(先补的那个1)0000...000
(总共512-64位) (一只:补了这么多 该补完了吧 一头:还差一点 一只:再吐血!!!!!!)这些完成后还要在其后面补上一个64位的数据 当然这个数据也是有规定的(一只:屁话 要不分开来讲干嘛) 这个数据就是原字节串的长度(当然这个长度已被转换成了64位 至此数据补 完 这样大家一看就能明白 其实补完后这串正好是512的倍数 512 * N-64+64
至此前两步 补位和补数据长度完成了

-------------------------------------先终止 实在没时间了---------------
-------------------------------------下面附一篇也不算难懂-------------

在一些初始化处理后,MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。
首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前)。这两步的作用是使消息长度恰好是512位的整数倍(算法的其余部分要求如此),同时确保不同的消息在填充后不相同。
四个32位变量初始化为:
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
它们称为链接变量(chaining variable)
接着进行算法的主循环,循环的次数是消息中512位消息分组的数目。
将上面四个变量复制到别外的变量中:A到a,B到b,C到c,D到d。
主循环有四轮(MD4只有三轮),每轮很相拟。第一轮进行16次操作。每次操作对a,b,c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a,b,c或d中之一。最后用该结果取代a,b,c或d中之一。
以一下是每次操作中用到的四个非线性函数(每轮一个)。
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))
(&是与,|是或,~是非,^是异或)
这些函数是这样设计的:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。
函数F是按逐位方式操作:如果X,那么Y,否则Z。函数H是逐位奇偶操作符。
设Mj表示消息的第j个子分组(从0到15),<<<s表示循环左移s位,则四种操作为:
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<<s)
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<<s)
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<<s)
II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<<s)
这四轮(64步)是:
第一轮
FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xc1bdceee)
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,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
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,0x265e5a51)
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,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
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,0x289b7ec6)
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,0x1fa27cf8)
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可以如下选择:
在第i步中,ti是4294967296*abs(sin(i))的整数部分,i的单位是弧度。
(2的32次方)
所有这些完成之后,将A,B,C,D分别加上a,b,c,d。然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。


MD5的安全性

MD5相对MD4所作的改进:
1.增加了第四轮.
2.每一步均有唯一的加法常数.
3.为减弱第二轮中函数G的对称性从(X&Y)|(X&Z)|(Y&Z)变为(X&Z)|(Y&(~Z))
4.第一步加上了上一步的结果,这将引起更快的雪崩效应.
5.改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似.
6.近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应.各轮的位移量互不相同.
  • md5.rar (12.2 KB)
  • 描述: 测试: zhong7758521 : 50945d41c5b4f365296a68ea416dc2c7 UJRdQcW082UpamjqQW3Cxw==
  • 下载次数: 20
分享到:
评论
1 楼 graduate 2008-09-09  
MD5算法简介

MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法,在1991年由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L. Rivest教授开发出来,经由MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。它的作用是让大容量信息在用数字签名软件签私人密匙前被"压缩"成一种保密的格式(将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的大整数,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。)

MD5算法应用

其典型应用是对一段Message(字节串)产生Fingerprint(指纹),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构为: MD5 (httpd-2.2.0.tar.bz2) =

402b90a2e47205f94b3b1d91e1a8c459,这就是httpd-2.2.0.tar.bz2文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改,如Repack进木马病毒,或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。

MD5还广泛用于加密和解密技术上。例如在UNIX系统中用户的密码就是以MD5(或其它类似算法)经加密后存储在文件系统中。当用户登录时,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

MD5算法简要描述

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

计算MD5的工具

WinMD5 v2.05(需要.NET运行库):http://www.blisstonia.com/software/WinMD5/WinMD5v2.05.zip

WinMD5 v1.1(无需.NET支持): http://www.blisstonia.com/software/WinMD5/WinMD5v1.1.zip

HashCalc v2.01:http://www.slavasoft.com/zip/hashcalc.zip

HashTab Windows Shell Extension v1.9:http://beeblebrox.org/hashtab/hashtab_setup.exe

参考资源

RFC 1321(Request for Comments document for The MD5 Message-Digest Algorithm),由Ronald Rivest在1992年8月提交给IEFT:

http://www.ietf.org/rfc/rfc1321.txt

http://www.faqs.org/rfcs/rfc1321

What are MD2, MD4, and MD5?

http://www.rsasecurity.com/rsalabs/node.asp?id=2253

密码学领域重大发现:山东大学王小云教授成功破解MD5

http://www.view.sdu.edu.cn/news/news/sdyw/2004-09-04/1094261946.html

原文链接:http://www.feelingme.cn/bbs/read.php?tid=873&fpage=4&toread=&page=1

相关推荐

    VB6 MD5算法_vb6md5_VB6MD5验签_vb6_VB6MD5算法_

    1. **MD5算法原理**:MD5算法通过四轮不同的操作(分别是Additive-XOR、Rotational、Additive和Parity)对输入数据进行处理,每轮操作都包含多个步骤,最终得到一个128位的摘要。这个摘要可以视为输入数据的“数字...

    MD5算法说明 .rar_fastest md5 source_md5_md5算法

    "MD5算法说明.doc"可能是对MD5算法的详细解释,包括其工作原理、计算流程和一些示例。而"www.pudn.com.txt"可能是从网站www.pudn.com下载的相关资源,可能包含有关MD5算法的更多资料,如其他实现、应用案例或讨论。 ...

    verilog MD5算法

    ### Verilog MD5算法 #### 一、简介 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,可以将任意长度的数据转换为一个固定长度(通常为128位)的值或者散列码。这种转换是单向的,即只能由消息计算出...

    md5算法与数字签名

    ##### 3.2 MD5算法的工作原理 MD5算法通过一系列复杂的数学运算处理输入信息,最终生成一个唯一的哈希值。这一过程具有以下特点: - **不可逆性**:无法从哈希值反推出原始数据。 - **唯一性**:不同数据几乎不...

    MD5密码算法

    MD5算法的基本流程包括四个不同的阶段:初始化、数据扩展、迭代计算和结果转换。以下是对这些步骤的详细说明: 1. 初始化:MD5的初始状态由4个32位的寄存器A、B、C和D组成,它们的初始值分别是0x67452301、0xEFCDAB...

    MD5_哈希算法_md5_

    例如,当你从互联网上下载一个文件后,可以用MD5校验码来比较本地文件与服务器上文件的MD5值,如果一致,则说明文件完整无误。 MD5的计算过程包括四个主要的步骤:初始化、数据处理、结果扩展和结果组合。这些步骤...

    md5加密算法

    MD5的工作原理是通过一系列的数学运算,如位操作、异或、加法等,将输入的数据分割成固定大小的块,然后经过四个不同的处理阶段:初始化、压缩、扩展和混合,最终生成一个128位的摘要。这个过程确保了即使输入数据有...

    c++实现的MD5算法

    `MD5说明.txt`文件可能包含了MD5算法的原理介绍、使用方法,或者在C++实现中的具体细节。MD5算法基于消息块的处理,每个块为64字节。它通过四个不同的阶段——初始化、压缩、扰动和输出——将输入转化为固定长度的...

    完整版数据摘要模块(MD5算法实现) 飞扬工作室.rar

    首先,我们来深入理解MD5的工作原理。MD5算法基于MD4算法进行改进,它包括四个处理阶段:初始化、压缩、填充和输出。在初始化阶段,MD5会用一组特定的常数值填充一个128位的缓冲区。接着,输入的数据被分块处理,每...

    MD5算法加密文件(网络安全课程设计)

    1. **MD5的基本原理**:MD5算法通过一系列复杂的数学运算(如位操作、异或、加法等)将输入的数据“消息”转化为128位的固定长度摘要。这个过程是不可逆的,即无法通过摘要恢复原始数据。MD5的目的是确保数据在传输...

    PB9.0调用MD5加密示例

    MD5加密的主要原理是,将输入的数据通过一系列的数学运算,如位移、异或等,最后生成一个128位的二进制数字,通常以32位的十六进制字符串形式表示。由于MD5的特性,相同的输入会产生相同的输出,而不同的输入几乎不...

    md5散列加密算法 强大的工具

    - `MD5_1.TXT`:可能是MD5算法的另一个版本或相关说明。 通过这些文件,开发者可以深入理解MD5的工作原理,甚至自行为自己的项目实现MD5散列函数。然而,考虑到MD5的安全性问题,现在的开发实践中更多的是使用更...

    MD5源码加说明文档(DLL接口函数)

    "MD5算法.txt"很可能包含了MD5算法的详细步骤和原理,可能包括以下几个步骤: 1. 初始填充:将原始消息填充到特定长度,确保其长度模512的余数为448。 2. 添加位长度:在填充后的消息后面添加64位表示原始消息的总...

    MD5算法c语言实现

    总的来说,"MD5算法C语言实现"项目提供了一个理解MD5工作原理和C语言编程实践的宝贵资源。通过分析和学习这个实现,开发者可以深入理解哈希函数的内部运作,并将其应用到自己的项目中,例如验证文件的完整性或者构建...

    C# MD5加密 实例源码(加密解密)

    如果需要验证数据完整性,可以再次使用相同的方法对数据进行MD5计算,然后与保存的MD5摘要进行比较,如果一致则说明数据未被篡改。 总结,C#中的MD5加密是一个简单的数据处理过程,用于生成数据的数字指纹。虽然MD5...

    md5 加密算法 实例下载

    4. 提供学习资源,比如文档、教程或代码示例,帮助用户进一步理解和学习MD5算法的原理。 在使用MD5或类似工具时,用户必须清楚认识到MD5的安全局限性,应避免将其用于需要严格安全保证的场合。同时,了解MD5的基本...

    md5摘要算法的C++实现源码

    1. **MD5基本原理**:MD5由四个不同的处理函数F、G、H、I以及四个32位的中间变量A、B、C、D组成。通过一系列的位运算(如左移、异或等)和特定的加法运算,对输入数据进行迭代处理,最终得到128位的摘要。 2. **...

    标准的MD5源码(md5.c,md5.h,使用说明文件)

    在这个情况下,`md5.h`可能会包含MD5函数的声明,比如`MD5Init`、`MD5Update`、`MD5Final`等,这些函数是MD5算法中的关键组成部分,分别用于开始计算、添加数据到哈希过程以及结束并返回最终的MD5摘要。 3. `说明....

Global site tag (gtag.js) - Google Analytics