Welcome

首页 / 软件开发 / C# / MD5算法描述的C#描述程序

MD5算法描述的C#描述程序2011-06-26MD5算法描述

当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节讲得不清楚,或者说很费解。最后不得不拿出C语言的源程序来调试,这对于理解算法是很不利的。于是就总结了一下我摸索到的一些要点。

1.来历

MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2、md3和md4发展而来。 http://www.ietf.org/rfc/rfc1321.txt ,是一份最权威的文档,

由ronald l. rivest在1992年8月向ieft提交。

2.用途

MD5的作用是对一段信息(message)生成信息摘要(message-digest),该摘要对该信息具有唯一性,可以作为数字签名。用于验证文件的有效性(是否有丢失或损坏的数据),对用户密码的加密,在哈希函数中计算散列值。

3.特点

输入一个任意长度的字节串,生成一个128位的整数。由于算法的某些不可逆特征,在加密应用上有较好的安全性。并且,MD5算法的使用不需要支付任何版权费用。

4.说明

唯一性和不可逆性都不是绝对的,从理论上分析是一种多对一的关系,但两个不同的信息产生相同摘要的概率很小。不可逆是指从输出反推输入所需的运算量和计算时间太大,使用穷搜字典的方法又需要太多的存储空间。

5.算法描述

算法输入是一个字节串,每个字节是8个bit.算法的执行分为以下几个步骤:

第一步,补位:

MD5算法先对输入的数据进行补位,使得数据的长度(以byte为单位)对64求余的结果是56。即数据扩展至LEN=K*64+56个字节,K为整数。

补位方法:补一个1,然后补0至满足上述要求。相当于补一个0x80的字节,再补值为0的字节。这一步里总共补充的字节数为0~63个。