什么是MD5码怎样校验MD5码
- 格式:doc
- 大小:401.00 KB
- 文档页数:11
md5校验案例MD5校验是一种常用的校验算法,用于验证数据的完整性和一致性。
它通过将数据转换为固定长度的散列值来实现校验的目的。
下面将列举10个与MD5校验相关的案例,以帮助读者更好地理解和应用这一算法。
1. 文件完整性校验:MD5校验常用于验证文件在传输过程中是否被篡改。
发送方在发送文件之前,计算文件的MD5值并一并发送给接收方。
接收方在接收到文件后,同样计算文件的MD5值,并与发送方发送的MD5值进行比对,以判断文件是否完整。
2. 密码存储与验证:在用户注册或登录时,通常需要对密码进行加密存储,并在用户登录时进行验证。
MD5可以将用户密码进行加密,并将加密后的MD5值存储在数据库中。
在用户登录时,系统将用户输入的密码进行MD5加密,并与数据库中存储的MD5值进行比对,以验证用户的身份。
3. 数据库数据一致性校验:在数据库中存储的数据可能会受到各种因素的影响,导致数据的一致性受到破坏。
为了确保数据的完整性,可以使用MD5校验对数据库中的数据进行校验。
通过定期计算数据的MD5值,并与预先计算好的MD5值进行比对,可以快速发现数据的异常。
4. 文件重复性检测:MD5校验可以快速判断两个文件是否相同。
通过计算两个文件的MD5值,并进行比对,如果两个文件的MD5值相同,则可以判定这两个文件内容相同。
5. 软件下载完整性校验:在下载软件时,为了确保软件的完整性,常常会提供MD5值供用户校验。
用户可以在下载完成后,计算下载文件的MD5值,并与提供的MD5值进行比对,以确保下载的软件没有被篡改。
6. 数据传输校验:在数据传输过程中,为了确保数据的完整性和准确性,可以使用MD5校验对数据进行校验。
发送方在发送数据前,计算数据的MD5值,并将其附加在数据中一并发送给接收方。
接收方在接收到数据后,同样计算数据的MD5值,并与发送方发送的MD5值进行比对,以判断数据是否正确传输。
7. 数字签名:MD5校验也可以用于数字签名的生成和验证。
md5文件验证方法MD5文件验证方法非常简单,它主要分为以下几个步骤:1.生成MD5值:首先,我们需要计算文件的MD5值。
可以使用MD5算法将整个文件转换为128位的哈希值,这个值被称为文件的MD5哈希值。
5.对比MD5值:将计算得到的MD5哈希值与文件的原始MD5值进行对比。
如果两个值相同,则文件未被篡改且传输无误;如果两个值不同,则文件可能已被篡改或传输过程中产生错误。
MD5文件验证方法的优点是快速和简单,只需要两个MD5哈希值进行对比即可。
然而,MD5算法存在一些问题,因此在实际使用过程中需要注意以下几点:1.容易被篡改:MD5算法本身并不是加密算法,它只是一种哈希算法。
因此,MD5哈希值容易被篡改和冲突。
黑客可以通过改变文件内容或替换MD5哈希值来欺骗系统。
2.潜在冲突:MD5算法存在潜在的碰撞风险,即两个不同的文件可能生成相同的MD5哈希值。
虽然这种情况较为罕见,但在一些特殊情况下可能会发生。
为了解决这些问题,我们可以采取以下改进措施:1.使用更安全的哈希算法:由于MD5算法的安全性问题,推荐使用更安全的哈希算法,如SHA-256或SHA-512、这些算法的哈希值更长,冲突风险较低。
2.对比多个哈希值:为了提高验证的准确性,可以计算多个哈希值,并对比它们。
例如,除了MD5哈希值之外,还可以计算SHA-256或SHA-512哈希值,并进行对比。
3.使用文件完整性验证工具:有一些专门的软件和工具可以帮助我们验证文件的完整性。
这些工具通常支持多种哈希算法,并提供更多的验证选项和功能,如递归验证文件夹、自动计算哈希值等。
总结来说,MD5文件验证方法是一种简单而快速的验证手段,可以帮助我们验证文件的完整性和准确性。
然而,由于MD5算法的一些局限性,我们应该采取一些改进措施,如使用更安全的哈希算法、对比多个哈希值以提高准确性,并使用专业的文件完整性验证工具。
md5校验原理
MD5(Message Digest Algorithm 5)是一种常见的哈希算法,用于对任意长度的数据生成固定长度的数字指纹,通常为128位(16字节)。
MD5校验的原理是通过对原始数据进行算法处理,得到一个固定长度的MD5值,然后将得到的MD5值与原始数据一同传输或存储。
在接收方或验证方可通过对接收到的数据再进行一次MD5处理,将得到的MD5值与原始的MD5值进行比较,从而判断原始数据的完整性与准确性。
具体的MD5校验过程如下:
1. 将原始数据分割成固定长度的数据块,并在数据块末尾进行填充,使其长度符合算法要求。
2. 初始化一个128位的中间状态,通常是一些固定的初始值。
3. 利用一系列的位操作、非线性函数和循环操作,对每个数据块进行处理,将数据块的信息混合进中间状态。
4. 当所有数据块处理完毕后,将最终的中间状态输出,并转化为一个128位的MD5值。
MD5校验的实质是利用MD5算法对原始数据进行摘要计算,并通过比较接收到的摘要值与之前生成的摘要值是否一致,来判断数据的完整性和准确性。
如果接收到的摘要值与之前生成的摘要值不一致,那么说明数据在传输过程中出现了错误或被篡改。
需要注意的是,MD5算法是一种单向的不可逆算法,即无法
通过摘要值来恢复原始数据。
因此,MD5校验一般用于验证
数据在传输或存储过程中是否发生变化,而不是用于加密数据。
此外,由于MD5算法的安全性存在漏洞,如碰撞攻击,因此
在安全性要求较高的场景中,建议使用其他更安全的哈希算法如SHA-256。
三一文库()〔如何进行MD5验证?〕*篇一:MD5验证是什么?MD5验证是什么?从通俗的话讲---就好比每个人的指纹都是唯一的一样,文件的MD5值也是唯一的,效验MD5就是用来确保文件在传输过程中未被修改用的。
从专业的话解释----一个MD5校验通过对接收的传输数据执行散列运算来检查数据的正确性。
计算出的散列值拿来和随数据传输的散列值比较。
如果两个值相同,说明传输的数据完整无误、没有被窜改过(前提是散列值没有被窜改),从而可以放心使用。
MD5校验可以应用在多个领域,比如说机密资料的检验,下载文件的检验,明文密码的加密等MD5校验原理举例说明:如客户往我们数据中心同步一个文件,该文件使用MD5校验,那么客户在发送文件的同时会再发一个存有校验码的文件,我们拿到该文件后做MD5运算,得到的计算结果与客户发送的校验码相比较,如果一致则认为客户发送的文件没有出错,否则认为文件出错需要重新发送。
*篇二:发送验证邮件的三种方法在.NET中的System.Web.Mail名字空间下,有一个专门使用SMTP协议来发送邮件的类:SmtpMail,它已能满足最普通的发送邮件的需求。
这个类只有一个自己的公共函数--Send()和一个公共属性—SmtpServer您必须通过SmtpServer属性来指定发送邮件的服务器的名称(或IP地址),然后再调用Send()函数来发送邮件。
第二、使用CDO组件发送邮件CDO是CollaborationDataObjects的简称,它是一组高层的COM对象集合,并经历了好几个版本的演化,现在在Windows2000和Exchange2000中使用的都是CDO2.0的版本(分别为cdosys.dll和cdoex.dll)。
CDOSYS构建在SMTP协议和NNTP协议之上,并且作为Windows2000Server的组件被安装,您可以在系统目录(如c:\winnt或c:\windows)的system32子目录中找到它(cdosys.dll)。
MD5在软件发布时会经常使用,是为了保证文件的正确性以及防止一些人盗用程序、加木马或篡改版权,所设计的一套验证系统。
每个文件都可以用MD5验证程序算出一个固定的MD5码来。
那么如何验证md5呢?
1、首先运行MD5验证工具,单击“浏览”选项,可以浏览以添加需要验证的软件,镜像或视频文件等,见下图,转到下面的步骤
2、然后执行完上面的操作之后,打开并搜索镜像,例如win7旗舰版,下载软件的文件系统信息MD5值,见下图,转到下面的步骤。
3、再执行完上面的操作之后,单击“浏览”按钮添加文件,见下图,转
到下面的步骤。
4、最后执行完上面的操作之后,md5验证将自动开始计算。
片刻之后,经过验证,将显示当前下载的MD5和sha1值,如图。
这样,就解决了这个问题了。
md5校验原理范文MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据映射成固定长度(128位)的哈希值。
MD5是一种无状态、单向加密算法,它将任意长度的数据通过一个公共的算法,生成一个128位长的哈希值。
MD5校验原理主要包括以下几个方面:1.消息填充:MD5算法接收任意长度的消息作为输入,首先需要对消息进行填充以确保其长度是64的倍数。
填充分为两个步骤:第一步,在消息尾部增加一个比特1,后面跟随足够数量的0,直到长度满足对64求余得到56;第二步,在第一步结果尾部增加原始消息的长度,以64位表示。
2.初始化链变量:MD5算法使用四个32位整数作为链变量:A、B、C、D。
这四个变量初始化为特定的常数,用于存储哈希结果的中间值。
3.迭代计算:MD5算法将消息分为若干个512位的数据块(如果分完后数据长度不足512位,则按照填充规则进行填充)。
每个数据块由16个32位字组成。
a.初始化A、B、C、D:A'=AB'=BC'=CD'=Db.主循环:对每个数据块执行以下操作:-将数据块的16个字按顺序装填到缓冲区数组X[0...15]中。
-进行四轮操作,每轮操作使用不同的非线性函数:-第一轮:f(X[i],X[i+1],X[i+2])=(X[i]∧X[i+1])∨(¬X[i]∧X[i+2]) -第二轮:g(X[i],X[i+1],X[i+2])=(X[i]∧X[i+2])∨(X[i+1]∧¬X[i+2]) -第三轮:h(X[i],X[i+1],X[i+2])=X[i]⊕X[i+1]⊕X[i+2]-第四轮:i(X[i],X[i+1],X[i+2])=X[i+1]⊕(X[i]∨¬X[i+2]) -更新A、B、C、D的值:t=A+f(B,C,D)+X[k]+T[i]A=DD=CC=BB=B+((t<<s),(t>>(32-s)))-最终,加上A'、B'、C'、D'的值:A=A+A'B=B+B'C=C+C'D=D+D'c.得到最终结果:将A、B、C、D以32位的大端序方式连接起来,得到128位的哈希值。
JSP使用MD5加密进行登录验证使用MD5加密进行登录验证是常见的一种方式,本文将详细介绍如何在JSP中使用MD5加密进行登录验证。
一、什么是MD5加密MD5是一种常用的加密算法,它将任意长度的数据转化为固定长度的密文,且不可逆。
即使输入数据只发生了一个字符的改变,也会导致加密后的密文发生巨大的变化,因此MD5加密是一种非常安全的加密方式。
在应用中,用户的账号和密码都是敏感信息,为了保护用户的隐私,通常会对用户的密码进行加密保存。
使用MD5加密是一种常见的方式,因为MD5加密后的密文很难被破解,即使被黑客获取到密文,也无法还原出原始密码。
三、如何在JSP中使用MD5加密1. 引入MD5加密算法的Java类库在JSP中,我们可以使用Java提供的MessageDigest类来实现MD5加密。
首先,需要引入java.security.MessageDigest类库,在JSP页面的顶部添加如下代码:```java```2.创建MD5加密方法创建一个方法来实现MD5加密,代码如下:```javapublic String md5Encryption(String input) throws ExceptionMessageDigest messageDigest =MessageDigest.getInstance("MD5");byte[] digest = messageDigest.digest(input.getBytes();StringBuilder result = new StringBuilder(;for (byte b : digest)result.append(String.format("%02x", b & 0xff));}return result.toString(;```这个方法接受一个输入参数,将其转换为字节数组后再进行加密计算,最后将结果转换为十六进制字符串形式返回。
⽂件MD5校验
1. 什么是MD5
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),⼀种被⼴泛使⽤的密码散列函数,可以产⽣出⼀个128位(16字节)的散列值(hash value),⽤于确保信息传输完整⼀致。
MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,⽤以取代MD4算法。
2. 算法原理
MD5以512位分组位处理单位,每⼀个分组⼜可以划分为16个32位⼦分组,经过⼀系列算法处理,算法输出4个32位分组,即4 * 32 = 128位散列值。
3. MD5应⽤
3.1 ⼀致性校验
⽤于⽂件传输,来确保接收的⽂件和传输的⽂件的⼀致性,防⽌在传输过程中被篡改。
3.2 数字签名
⽀付领域应⽤MD5,保证⽀付信息不会被篡改。
3.3 安全访问认证
设计⽤户登录时,⽤户密码如果明⽂存⼊数据库,就存在被泄露的风险。
因为MD5加密是不可逆的,对⽤户密码进⾏MD5加密存⼊数据,就可保证密码不会被泄露。
以上来⾃百度百科。
链接:
4. 获取⽂件的MD5
获取⽂件的MD5,⾸先要读取⽂件内容。
把⽂件内容做输⼊,MD5处理之后输出⽂件的MD5。
这样相同的⽂件就会有⼀致的MD5。
要注意的是读取⽂件的⽅式要选择⼆进制读取⽅式。
如果涉及Window上传⽂件到Linux服务器,上传⽅式也要选择⼆进制⽅式。
这样在Window和Linux对同⼀个⽂件获取的MD5才会⼀致。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==如何校验md5篇一:教你md5验证工具怎么用教你md5验证工具怎么用MD5简介: MD5是一款对所有文件MD5值检测的软件。
MD5的实际应用是对一段Message(字节串)产生fingerprint(指纹),可以防止程序被他人“篡改”。
MD5使用步骤:第一步:打开MD5校验软件第二步:将您下载的软件拖到该软件内第三步:将您MD5软件生成的校验码与我们官网上公布的校验码做对比。
相同则表示您所下载的软件为合法软件。
不同则表示您所下载的软件已被非法改动,请不要安装使用。
Ghost Win8【系统信息】文件名称:DINGHAO_GHOSTWIN8.iso文件大小:3.33 GB文件格式:NTFS + 32位Win8MD5: 0EC4F556C688375772D1ACF3B934CD64SHA1: 77C55E0FAFA497A4FF6D8DFEB9A2BB98A4F1DB4FCRC32: A14C107C鼎好Ghost Win8 极速装机通用版下载:江苏电信下载本地高速下载镜像高速下载电信下载(迅雷专用)迅雷下载(一) 迅雷下载(二)篇二:什么是MD5码怎样校验MD5码什么是MD5码?怎样校验MD5码?201X-02-06 01:22下载WinMD5校验器为了确保您所下载的文件是完整和安全可靠的,我们建议您使用MD5校验,这里将介绍什么是MD5校验和如何使用MD5工具进行校验。
什么是MD5码?MD5码是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。
任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息码,并且如果这个文件被修改过,它的MD5码也将随之改变。
md5加密原理解析现如今,数据的安全性对于个人和组织来说都是至关重要的。
在信息传输和存储过程中,加密的作用不可忽视。
MD5(MD5 Message-Digest Algorithm)是一种常用的加密算法,被广泛应用于数据的摘要、签名等方面。
本文将对MD5加密原理进行详细解析。
一、MD5的概述MD5是一种哈希算法,它能够将不同长度的数据转换成一个128位的长度固定的哈希值。
这个哈希值可以用于数据的完整性校验和密码的存储。
二、MD5的工作原理MD5算法主要包括四个步骤:填充、初始化、计算和输出。
下面将对这四个步骤逐一进行解析。
1. 填充(Padding)在进行MD5加密之前,首先需要对待加密的数据进行填充。
填充的目的是让数据的长度能够满足512位的整数倍,以便后续的处理。
填充的方式是在数据的末尾添加一个bit为1,然后再添加若干个bit为0的位,直到数据的长度满足要求。
2. 初始化(Initialization)初始化是指对MD5算法中的四个32位寄存器进行初始化,这四个寄存器分别为A、B、C、D。
初始时,这四个寄存器的值通过一个预定义的方式设置,而且对于每一次加密过程,这些寄存器的初值都是相同的。
3. 计算(Computation)计算是MD5算法的核心部分,它包括四轮循环处理。
在每一轮中,通过对每一组512位的数据进行操作,更新A、B、C、D四个寄存器的值,最终得到一个128位的哈希值。
这个过程中包括了多次按位运算、位移运算、逻辑函数和模2^32相加等操作。
4. 输出(Output)在计算完成之后,MD5算法将得到一个128位的哈希值。
这个哈希值可以用来作为数据的完整性校验。
通常情况下,MD5算法会将这个哈希值转化为16进制格式进行输出,形式为32个字符。
三、MD5的优缺点1. 优点:(1) 哈希结果的长度固定,不论原始数据长度如何,始终为128位。
(2) 运算速度快,加密效率高。
(3) 相同的数据生成的MD5值是固定的,可以用于数据的校验。
什么是MD5码?怎样校验MD5码?2008-02-06 01:22下载WinMD5校验器为了确保您所下载的文件是完整和安全可靠的,我们建议您使用MD5校验,这里将介绍什么是MD5校验和如何使用MD5工具进行校验。
什么是MD5码?MD5码是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。
任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息码,并且如果这个文件被修改过,它的MD5码也将随之改变。
MD5码有什么用?我们可以通过对比同一文件的MD5码,来校验这个文件是否被“篡改”过。
当我们下载了文件后,如果想知道下载的这个文件和官方网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5码校验。
MD5码如何使用?1、下载官方提供的MD5码校验工具下载WinMD5校验器2、运行MD5码校验工具如WinMD5、MD5Check.exe 等3、将要检查的文件拖动到窗口内,选择计算等待生成MD5码4、检查生成的MD5码是否与官方网站提供的相同5、如果得到的MD5码和官方网站公布的相同,可确认所下载的文件是完整且正确的。
6、如果MD5码和官方网站公布的不同,说明你下载的文件不完整或在网络下载的过程中出现错误,请您重新下载;也有可能该文件已被别人修改,为防止他人更改该文件时放入病毒或木马,请不要使用该客户端。
又文:什么是MD5?怎样用MD5来校验下载的iso镜像文件?一、什么是MD5?MD5 是一种加密技术,其典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。
举个例子,警察可以根据指纹来指认犯罪嫌疑人,那么,我们就可以根据文件的MD5 值来验证文件是否原始文件,以防止被篡改、加入木马、病毒等。
(关于MD5 的有关情况请参阅汉化包中的“MD5简介.txt” 文档)WinMD5 则是校验文件的MD5 值的一个小程序。
有时我们下载了许多东西,其中有几个文件大小、类型相同的,但我们还是无法判断它们是否是同一文件,怎么办呢?这时就要用到WinMD5 了。
我们可以把文件拖动到WinMD 5 程序窗口,查看文件的MD5 校验值是否相同,如果相同,那就是同一文件,如果不同,那就不是同一文件,这样既节省了硬盘空间,又可防止木马、病毒等。
二、怎样用MD5来校验下载的iso镜像文件?(以YlmF XP2 Y1.85国庆版.iso 为例)1、下载WinMD51.1_mouse.exe鼠标版的MD5校验器,地址: /ViewDownloadUrl.asp?ID=1242、打开WinMD51.1_mouse.exe鼠标版,出现下图:然后将下载的YlmF XP2 Y1.85国庆版.iso整个镜像文件(不能解压、不能打开),拖入上图的窗口中。
经过校验,得出下图:将上面的MD5值与发布页上的MD5比对,完全一致,说明下载的是正版、并未被人改动过的原版iso镜像文件,直接刻录就是一张可启动的YlmF XP2 Y1. 85国庆版光盘。
重要提示:如果将YlmF XP2 Y1.85国庆版.iso镜像文件解压后,提取其中的Y lmF.gho来校验,是绝对不正确的。
有些ISO镜像文件中也还有一个ISO文件,将它解压后提取并校验也是不对的。
总之,只能将整个ISO镜像文件进行校验才是正确做法。
类别:计算机 | 添加到搜藏 | 浏览(1608) | 评论 (0)上一篇:【祝外婆生日快乐^-^——白云山...下一篇:专家揭秘:男人想要结婚的十个信...相关文章:•MD5真的已靠不住?同样校验,不同...•MD5校验是怎么回事•Hash V1.04 NZONE 汉化绿色版+英...•"数字指纹"——MD5校验值(含MD5...•使用md5校验和算法保护文件•SHA (SHA-1 SHA-2) 附MD5 SHA-1 ...•HashTab - 给文件属性窗口添加数...•GhostXP_SP2电脑公司特别版系统...•MD5全文校验器 V1.0.1.1版(目前...•宣传朋友写的一个工具:MD5全文校...更多>>使用md5校验和算法保护文件2007-12-27 21:04使用md5校验和算法保护文件/article/75401.shtm近日要用到文件校验算法,查看了一下相关资料,得到以下理论与实践经验。
一、理论部分:1、预备知识1.1什么是数据校验通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。
接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。
1.2最简单的检验实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。
同时也是效率最低的。
适用范围:简单的数据量极小的通讯。
应用例子:龙珠cpu在线调试工具bbug.exe。
它和龙珠cpu间通讯时,bbug 发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。
1.3奇偶校验Parity Check实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。
校验位可以通过数据位异或计算出来。
应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。
1.4 bcc异或校验法(block check character)实现方法:很多基于串口的通讯都用这种既简单又相当准确的方法。
它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把她附在通讯数据的最后一起发送出去。
接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。
校验值计算的代码类似于:unsigned uCRC=0;//校验初始值for(int i=0;i<DataLenth;i++) uCRC^=Data[i];适用范围:适用于大多数要求不高的数据通讯。
应用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用。
1.5 crc循环冗余校验(Cyclic Redundancy Check)实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。
crc校验具还有自动纠错能力。
crc检验主要有计算法和查表法两种方法,网上很多实现代码。
适用范围:CRC-12码通常用来传送6-bit字符串;CRC-16及CRC-CCITT码则用是来传送8-bit字符。
CRC-32:硬盘数据,网络传输等应用例子:rar,以太网卡芯片、MPEG解码芯片中1.6 md5校验和数字签名实现方法:主要有md5和des算法。
适用范围:数据比较大或要求比较高的场合。
如md5用于大量数据、文件校验,des用于保密数据的校验(数字签名)等等。
应用例子:文件校验、银行系统的交易数据2、具体的实现理论2.1 算法概述MD5算法是MD4算法的改进算法。
Ron Rivest 于1990年提出MD4单向散列函数,MD表示消息摘要(Message Digest),对输入消息,算法产生128位散列值。
该算法首次公布之后,Bert den Boer和Antoon Bosselaers 对算法三轮中的后两轮进行了成功的密码分析。
在一个不相关的分析结果中,RalphMerKle成功地攻击了前两轮。
尽管这些攻击都没有扩展到整个算法,但Rivest还是改进了其算法,结果就是MD5算法。
MD5算法是MD4的改进算法,它比MD4更复杂,但设计思想相似,输入的消息可任意长,输出结果也仍为128位,特别适用于高速软件实现,是基于32-位操作数的一些简单的位操作。
2.2 算法步骤l 将输入消息按512-位分组,最后要填充成为512位的整数倍,且最后一组的后64位用来填充消息长度(填充前)。
填充方法为附一个1在消息后,后接所要求的多个0。
这样可以确保不同消息在填充后不相同。
l 由于留出64位用来表示消息长度,那么消息的长度最多可达264字节,相当于4G×4G字节,文件的长度是不可能达到这么大,因此通常都是只采用64位中的低32位来表示消息长度,高32位填充0。
l 初始化MD变量。
由于每轮输出128位,这128位可用下面四个32位字A,B,C,D来表示。
其初始值设为:A=0x01234567B=0x89ABCDEFC=0xFEDCBA98D=0x76543210l 开始进入算法主循环,循环的次数是消息中512位消息分组的数目。
先将上面A、B、C、D四个变量分别复制到另外四个变量a、b、c、d中去。
主循环有四轮,每轮很相似。
每轮进行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⊕ZI(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步)结果略。
注:常数ti的选择:第i步中,ti是232 ×abs (sin(i))的整数部分,i的单位是弧度。
所有这些完成之后,将A,B,C,D分别加上a,b,c,d。
然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。
l 最后得到的A,B,C,D就是输出结果,A是低位,D为高位,DCBA组成128位输出结果。