MD5
加密
C#[ZZ]
http://blog.csdn.net/Ewangsoft/archive/2006/07/22/960980.aspx
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
个。
第二步,附加数据长度:
用一个
64
位的整数表示数据的原始长度
(
以
bit
为单位
)
,
将这个数字的
8
个字节按低位的在
前,
高位在后的顺序附加在补位后的数据后面。这时,数据被填补后的总长度为:
LEN = K*64+56+8=(K+1)*64 Bytes
。