![](http://www.infosecurity.org.cn/article/images/2005061301/200561320243534977801.gif)
在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的“散列”或“消息摘要”(Message digest)。一个安全的哈希函数H必须具有以下属性:
l)H能够应用到大小不一的数据上。
2)H能够生成大小固定的输出。
3)对干任意给定的x,H(x)的计算相对简单。
4)对于任意给定的代码h,要发现满足H(x)=h的x在计算上是不可厅的。
5) 对于任意给定的块x,要发现满足H(y)=H(x)而y=x在计算上是不可行的。
6)要发现满足H(X)=H(y)的(X,y)对在计算上是不可行的。
![](http://www.infosecurity.org.cn/article/images/2005061301/200561320243534977801.gif)
MD2算法是Rivest在1989年开发出来的,在处理过程中首先对信息进行补位,使信息的长度是16的倍数,然后以一个16位的校验和追加到信息的末尾,并根据这个新产生的信息生成128位的散列值。它针对8位的计算机进行过优化,但速度比后来的散列算法要慢。
![](http://www.infosecurity.org.cn/article/images/2005061301/200561320243534977801.gif)
Rivest在1990年又开发出MD4算法。MD4算法也需要信息的填充,它要求信息在填充后加上448能够被512整除。用64比特表示消息的长度,放在填充比特之后生成128位的散列值。
![](http://www.infosecurity.org.cn/article/images/2005061301/200561320243534977801.gif)
MD5(MessagC Digest Algorithm--5)算法是由 Rivest在1991年设计的,在RFC 1321中描述[16]。MD5按512位数据块为单位来处理输入,产生128位的消息摘要。
![](http://www.infosecurity.org.cn/article/images/2005061301/200561320243534977801.gif)
SHA( Secure Hash Algorithm)算法由NIST开发,并在1993年作为联邦信息处理标准公布。在1995年公布了其改进版本SHA-1。SHA与MD5的设计原理类似,同样也按刘二位数据块为单位来处理输入,但它产生160位的消息摘要,具有比MD5更强的安全性[17、18]