MD5算法及其JAVA程序设计.doc

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

第8章 MD5算法及其JAVA程序设计. MD5算法MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ron Rivest提出,MD5算法是经由MD2、MD3和MD4发展而来的一种散列算法。它的作用是将一个任意长度的字节串压缩变换成一定长的整数。算法的设计基于替换—置换网络的香农原理。由于香农原理可有效抵御密码分析的攻击,现代大多数重要的散列算法都遵循这一基本结构。为了避免采用另外一种全新的设计会带来意想不到的缺陷为攻击会敞开大门,现有更新的设计仅对该结构做一些细化以及增加散列码的长度。 MD5512位分组来处理输入的信息且每一分组又被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位子分组组成,将这四个32位分组级联后生成一个128位散列值。 MD5逻辑处理操作包括以下几步: 步骤一:附加填充比特。对报文填充使报文的长度(比特数)与448模512同余。即填充比特使长度为512的整数倍减去64。例如,如果报文是448比特长,那么将填充512比特形成960比特的报文。填充比特串的最高位为1,其余各位均为0。 64比特表示的初始报文(填充前)的位长度附加在步骤一的结果后(低位字节优先)。如果初始长度大于2,仅使用该长度的低64比特。这样,该域所包含的长度值为初始报文长度模2的值。 512整数倍比特的报文。经扩展的报文表示成512比特的分组序列,因此扩展的报文长度等于乘512比特。与之等价的是,该结果也等于字长为16比特或32比特的整数倍,如果让表示扩展报文包含的字数,其中是16的倍数,则等于 乘512。见图8.1所示。 MD缓存。使用一个128比特的缓存来存放该散列函数的中间值及最终结果。该缓存可表示为4个32比特的寄存器EFCDAB89, 98BADCFE这些值以低位字节放在在前的格式存储:89ABCDEF,FEDCBA98512比特报文分组序列。算法的核心是一个包含四个“循环”的压缩函数,这个模块在图6.1中标识为HMD5,图.2说明了它的逻辑。 。每一循环都以当前的正在处理的512比特分组和128比特的缓存值为输入,然后更新缓存的内容。每一循环使用一个64元素表的四分之一,该表通过正弦函数构建。的第个元素(表示为)的值等于的整数部分值其中的单位是弧度。因为是0到1之间的数,每个的值均能用32比特表示集,它将消除输入数据的任何规律性。表.1为正弦函数构造表T。 上产生,相加是缓存四个字与 中对应四个字以模2相加。 个512比特的分组处理完成后,第阶段产生的输出便是128比特的报文摘要。总结MD5的操作如下: 缓存ABCD的初值,在步骤三定义 q个长度为512比特的报文分组 处理第q个报文分组时的连接变量 的循环函数 最终的报文摘要 对输入对中的每个字分别执行模相加 MD5 压缩函数 512比特分组中每个循环的逻辑。每一循环由对缓存的16步操作组成。每一步操作的形式为 缓存中的四个字,在不同的步骤中有指明的顺序 原始函数中的一个 比特参数循环左移个比特 在第个长度为512比特报文分组中第 矩阵中第个比特字,为模加法。 图8.3说明了这个步骤的操作。在每一步中,四个字3个32比特字输入并产生1个32比特字输出。 8.2四个函数的真值表 环 原 始 函 数 g g ( b,c,d ) 1 F (b,c,d) (b∧c)∨(∧d) 2 G (b,c,d) (b∧d) ∨ (c∧) 3 H (b,c,d) bcd 4 I (b,c,d) c(b∨) 表8.3 四个逻辑操作函数的真值表 b c d F G H I 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 比特的输出是这3个输入中的第比特的一个函数。该函数总结如下:逻辑操作分别用符号(∧,∨, ̄, )表示。函数是一个条件函数:如果则,否则。类似的,也可以描述如下:如果则,否则。函数8.2和表.3为这四个函数的真值表。 32比特字数组保存当前512比特待处理输入分组的值。在一次循环中的每一步内,这16个字中的每一个只被使用一次;这些字的使用顺序在不同的循环中不同。在第一次循环,字按原

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档