网站大量收购独家精品文档,联系QQ:2885784924

关于MD5说明及代码实现.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于MD5说明及代码实现

一、MD5概念MD5,全名Message Digest Algorithm 5 ,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,压缩+加密+hash算法的结合体,是绝对不可逆的。备注:HASH算法,哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。二、MD5计算步骤MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。备注:512位(64字节)分组 = 16 * 32位(4字节)子分组。输出为4 * 32位(4字节) = 128位(16字节),16字节用16进制表示为32个ASCII码。第一步、填充。在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448,并且填充必须进行,即使其位长对512求余的结果等于448(则需要填充512位)。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零(如填充前的位长448位,填充后N=0)。填充的方法如下:(下图有例子)1) 在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。2) 在这个结果后面附加一个以64位二进制表示的填充前信息长度(单位为Bit),如果二进制表示的填充前信息长度超过64位,则取低64位。经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。第二步、初始化变量。关于大小端数据的问题,见参考后面的截图。初始的128位值为初始链接变量,这些参数用于第一轮的运算,以大端字节序来表示,他们分别为: A=0B=0x89ABCDEF,C=0xFEDCBA98,D=0(每一个变量给出的数值是高字节存于内存低地址,低字节存于内存高地址,即大端字节序。在程序中变量A、B、C、D的值分别为00xEFCDAB89,0x98BADCFE,0其实取决于MCU是多少位系统。)第三步、处理分组数据(512位)。每一分组的算法流程如下:第一分组(前512位)需要将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。从第二分组(513-1024位)开始的变量为上一分组的运算结果,即A = a, B = b, C = c, D = d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的1个子分组和一个常数。再将所得结果向左环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以下是每次操作中用到的四个非线性函数(每轮一个)。F( X ,Y ,Z ) = ( X Y ) | ( (~X) Z )——第一轮16次操作使用G( X ,Y ,Z ) = ( X Z ) | ( Y (~Z) )——第二轮16次操作使用H( X ,Y ,Z ) =X ^ Y ^ Z——第三轮16次操作使用I( X ,Y ,Z ) =Y ^ ( X | (~Z) )——第四轮16次操作使用(是与(And),|是或(Or),~是非(Not),^是异或(Xor))这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。假设Mj表示消息的第j个子分组(从0到15),常数ti是4294967296*abs( sin(i) )的整数部分,i取值从1到64,单位是弧度。(4294967296=232)现定义: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 + ( (

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档