MD5原理说明

一、MD5算法介绍。

MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,从名字来看就知道它是从MD3、MD4发展而来的一种加密算法,其主要通过采集文件的信息摘要,以此进行计算并加密。通过MD5算法进行加密,文件就可以获得一个唯一的MD5值,这个值是独一无二的,就像我们的指纹一样,因此我们就可以通过文件的MD5值来确定文件是否正确,密码进行加密后也会生成MD5值,论坛就是通过MD5值来验证用户的密码是否正确的。

二、MD5算法实现。

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。

1、填充编码。

在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

2、算法实现。

如右图,一个MD5运算由类似的64次循环构成,分成4组16次。F 一个非线性函数;一个函数运算一次。Mi 表示一个 32-bits 的输入数据,Ki表示一个 32-bits 常数,用来完成每次不同的计算。

主循环有四轮(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))

       (&;是与,|是或,~是非,^是异或)

具体这64次循环(分4轮)过程函数如下:

第一轮:(MD5一共4轮)

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)

  第四轮

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三、MD5算法的不足。

现在看来,MD5已经较老,散列长度通常为128位,随着计算机运算能力提高,找到“碰撞”是可能的。因此,在安全要求高的场合不使用MD5。

2004年,王小云教授证明MD5数字签名算法可以产生碰撞。2007年,Marc Stevens,Arjen K. Lenstra和Benne de Weger进一步指出通过伪造软件签名,可重复性攻击MD5算法。研究者使用前缀碰撞法(chosen-prefix collision),使程序前端包含恶意程序,利用后面的空间添上垃圾代码凑出同样的MD5 Hash值。2007年,荷兰埃因霍芬技术大学科学家成功把2个可执行文件进行了MD5碰撞,使得这两个运行结果不同的程序被计算出同一个MD5。2008年12月科研人员通过MD5碰撞成功生成了伪造的SSL证书,这使得在https协议中服务器可以伪造一些根CA的签名。

MD5被攻破后,在Crypto2008上, Rivest提出了MD6算法,该算法的Block size为512 bytes(MD5的Block Size是512 bits), Chaining value长度为1024 bits, 算法增加了并行 机制,适合于多核CPU。 在安全性上,Rivest宣称该算法能够抵抗截至目前已知的所有的 攻击(包括差分攻击)。

MD5值算法原理的更多相关文章

  1. MD5值转换(Hex 32位 <-> base64 24位)

    关于MD5值的原理本文不在介绍,本文主要介绍MD5值的两种编码的相互转换(32位和BASE64编码的24位),实际应用过程中经常会涉及到两种编码的相互转换.快熟使用工具tomeko.net. C#示例 ...

  2. kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法)

    kmeans一般在数据分析前期使用,选取适当的k,将数据聚类后,然后研究不同聚类下数据的特点. 算法原理: (1) 随机选取k个中心点: (2) 在第j次迭代中,对于每个样本点,选取最近的中心点,归为 ...

  3. MD5算法【计算文件和字符串的MD5值】

    1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错).任何长度的任意内容都可以用MD5计算出散列值.MD5的前身:MD2.MD3.MD4.介绍工具:CalcMD5 ...

  4. 集成学习值Adaboost算法原理和代码小结(转载)

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...

  5. md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

    md5是哈希算法的改进加强,因为不同原始值可能hash结果一样,但md5则改善了用于验证消息完整性,不同md5值原始值也必将不一样

  6. 【密码学】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能:    输 ...

  7. 【编程开发】MD5算法原理

    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用.     MD5功能: ...

  8. 分布式缓存技术memcached学习(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...

  9. SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)

    SSH原理与运用(一)和(二):远程登录  RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ht ...

随机推荐

  1. Linux:设置alias永久生效

    登录数据库每次要输入密码,如:[root@localhost ~]# mysql -p123456 觉得麻烦... 简单的方法可以设置别名:alias mysql="mysql -p1234 ...

  2. Atom markdown .md 编写格式技巧

    使用Atom预览markdown 1.打开任意.md文件(markdown源文件) 菜单栏File->Open file...(ctrl+o)打开文件: 2.windows下使用快捷键 ctrl ...

  3. CentOS 安裝 VMware Workstation / VMware Player

    参考:http://www.vixual.net/blog/archives/650 序列号:1F04Z-6D111-7Z029-AV0Q4-3AEH8 注意说明:刚开始有很长的一系列协议信息,可以用 ...

  4. leetcode 27

    27. Remove Element Given an array and a value, remove all instances of that value in place and retur ...

  5. 007Linux在线升级yum

    1.Linux下如何安装软件:利用rpm命令进行安装: 2.rpm优点:安装过程很简单,不需要做额外的配置逻辑,拿到安装包,通过rpm命令就可以安装: 3.rpm缺点: (1)需要自己四处去找和系统版 ...

  6. 对于返回void类型的asyc的异步方法,如何修改,能使用await

    下面是使用WebClinet 获取百度首页的html代码,一般的写法如下: private void Button_Click(object sender, RoutedEventArgs e) { ...

  7. 关于使用SVN update时出现:E155004错误

    今天早上到公司开了电脑,准备update下SVN的代码,但是在update时出现svn: E155004: Working copy 'E:\XX' locked  错误,乍眼一看以为是什么配置出错, ...

  8. c#中$.ajax的使用

      <script type="text/javascript">  var telphone = { type: "getphone", &quo ...

  9. iOS网络通讯——监测网络状态:Reachability(可达性)

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用.大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通过 ...

  10. Log4net使用笔记

    Log4net使用笔记   编写人:CC阿爸 2013-10-29 近来在处理项目时候,想将系统的操作日志以文本的形式记录下来,方便对系统操作记录进行追踪. 经过在网上搜索部分解决方案,大致可以归纳如 ...