组织:中国互动出版网(http://www.china-pub.com/)
rfc文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm) 【相关文章:Java 库的建立方法及其实例】 【扩展阅读:ATL布幔之下的秘密(2)】e-mail:ouyang@china-pub.com 【扩展信息:多线程设计要点】 译者:() 译文发布时间:2001-11-7 版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须 保留本文档的翻译及版权信息。
network working group r. rivest
request for comments: 1321 mit laboratory for computer science and rsa data security, inc. april 1992md5 报文摘要算法
(rfc1321——the md5 message-digest algorithm)本文地位
本文并非指定一个internet标准,而是向互联网提供信息,本文可以任意传播,不受限制。 致谢 don coppersmith, burt kaliski, ralph merkle,david chaum, 与noam nisan向本文提供极大的帮 助,在此本人表示忠心的感谢。目录
1 执行简介 1 2 术语与符号 1 3 md5算法描述 2 4 摘要 4 5 md4与md5的区别 4 6 参考文献 4 7 附录a-参考应用程序 4 8 安全事项 18 9 作者地址 181 执行简介
本文描述了md5报文摘要算法,此算法将对输入的任意长度的信息进行计算,产生一个128位 长度的“指纹”或“报文摘要”,假定两个不同的文件产生相同的报文摘要或由给定的报文摘要产生 原始信息在计算上是行不通的。md5算法适合用在数据签名应用中,在此应用中,一个大的文件必 须在类似rsa算法的公用密钥系统中用私人密钥加密前被“压缩”在一种安全模式下。 md5算法能在32位机器上能以很快的速度运行。另外,md5算法不需要任何大型的置换列表。 此算法编码很简洁。md5 算法是md4报文摘要算法的扩展。md5算法稍慢于md4算法,但是在设 计上比md4算法更加“保守”。设计md5是因为md4算法被采用的速度太快,以至于还无法证明 它的正确性,因为md4算法速度非常快,它处在遭受成功秘密攻击的“边缘”。md5后退了一步, 它舍弃了一些速度以求更好的安全性。它集中了不同的评论家提出的建议,并采取了一些附加的优化 措施。它被放在公共的地方以求公众的评论意见,它可能当作一个标准被采纳。 作为基于osi的应用,md5的对象标识符是: md5 object identifier ::= iso(1) member-body(2) us(840) rsadsi(113549) digestalgorithm(2) 5} 在x.509类型algorithmidentifier [3]中,md5算法参数应该包括null类型。 2 术语与符号 本文中一个“字”是32位,一个“字节”是8位。一系列位串可看成是一系列字节的普通形式, 其中的连续的8位看成一个字节,高位在前,同理一系列字节串可看成是一系列32位的字,其中每 个连续的4个字节当作一个字,地位在前。 我们定义x_i代表“x减去i".如果下划线左边的是一个表达式,则用括号括住,如: x_{i+1}。同样我们用^代表求幂,这样x^i则代表x的i次幂。 符号“+”代表字的加,x <<< s代表32位的值x循环左移s位,not(x)代表x的按位 补运算,x v y 表示x与y的按位或运算,xxory代表x与y的按位异或运算,xy代表 x与y的按位与运算。 3 md5算法描述 我们假设有一个b位长度的输入信号,希望产生它的报文摘要,此处b是一个非负整数,b也可 能是0,不一定必须是8的整数倍,它可能是任意大的长度。我们设想信号的比特流如下所示: m_0 m_1 ... m_{b-1} 下面的5步计算信息的报文摘要。 (1) 补位 md5算法是对输入的数据进行补位,使得如果数据位长度len对512求余的结果是448。即数 据扩展至k*512+448位。即k*64+56个字节,k为整数。补位操作始终要执行,即使数据长度len 对512求余的结果已是448。 具体补位操作:补一个1,然后补0至满足上述要求。总共最少要补一位,最多补512位。 (2) 补数据长度 用一个64位的数字表示数据的原始长度b,把b用两个32位数表示。那么只取b的低64位。 当遇到b大于2^64这种极少遇到的情况时,这时,数据就被填补成长度为512位的倍数。也就是说, 此时的数据长度是16个字(32位)的整数倍数。用m[0 ... n-1]表示此时的数据,其中的n是16 的倍数。 (3) 初始化md缓冲器 用一个四个字的缓冲器(a,b,c,d)来计算报文摘要,a,b,c,d分别是32位的寄存器,初 始化使用的是十六进制表示的数字 a=0x01234567 ... 下一页