2) MD5算法
MD5消息摘要算法(RFC1321)由Ron Rivest提出。该算法以一个任意长的消息作为输入,输出128hit的消息摘要。输入按512bit的分组进行处理。MD5处理操作包括以下几步:
1、附加填充位
对消息进行填充使消息的长度与448模512同余(长度-44-8 mod512),即填充长度为5 12的整数倍再减去64。
2、附加长度值
将填充前的初始消息的长度(用64bit表示)按低位字节优先附加在步骤l的结果后。如果初始长度大于264,仅使用该长度的低64bit…这样,该域所包含的长度值为初始消息长度模26砗的值。前两步的结果产生一个长度为512整数倍比特的消息。
3、初始化MD缓存
使用一个128bit的缓存来存放该散列函数的中间及最终结果。该缓存可表示为4个32bit的寄存器(A,B,C,D)。
4、处理512bit(16字节)消息分组序列
算法的核心是一个包含4轮处理的压缩函数。4轮处理具有相似的结构,但每次使用不同的基本逻辑函数,每一轮以当前的512位数据块( Yq)和128位缓冲值ABCD作为输入,并修改缓冲值的内容。
5、输出
所有L个512bit的分组处理完成后,第L阶段产生的输出便是128bit的消息摘要。
随着处理器速度的提升,128bit散列值的安全性已经成为问题。可以看出,具有相同消息摘要的两个消息的处理需要264次操作,而给定摘要寻找消息需要2128次操作。前一个数字太小了,不能够保证安全性。众多密码分析攻击的出现正说明了MD5在密码分析方面的弱点。