哈希值有以下四个特点:
1. 计算效率高(要计算任何输入值的哈希值非常容易)
2. 抗冲突(没有两条输入值可以给出相同的哈希值)
3. 隐藏输入信息(不能通过哈希值推算出输入值)
4. 输出应该看起来随机(但是一样的输入值会得到一样的哈希值)
1/2. MD4/MD5/HAVAL
MD4:
Ron Rivest设计,生成128位消息摘要值,用于高速计算要求的软件系统,针对微处理器进行了优化。
MD4先要填充消息,确保消息的长度比512的倍数小64位,例如一个16位消息要填充432位数据,使其达到448位(512*1-64)。
MD4被认为不安全,已基本弃用。
MD5:
Ron Rivest设计,MD4升级版,生成128位消息摘要值,MD5和MD4一样先要填充消息,但算法更复杂。
增加了第四轮运算,有研究表明MD5不敌碰撞攻击,不再适用于需要抵抗碰撞攻击的应用,如SSL和数字签名。
MD5应用非常广泛,即使被证明不再安全,但是MD5现在还常用于文件完整性校验,例如一些入侵检测系统,以及司法证据完整性校验等非加密目的的应用。
HAVAL:
称为可变长度散列,是MD5的修订版,使用1024位块,可产生128、160、192、224和256位散列值。HAVAL 还允许用户指定用于生成哈希的轮数(3、4 或 5)。
遗憾的是,HAVAL也在2004年前后被攻破。
2/2. SHA系列
Secure Hash Algorithms,安全哈希算法。
SHA系列是由NSA设计、NIST发布,和数字签名标准(Digital Signature Standard,DSS)一起使用的哈希函数——美国联邦信息处理标准(FIPS)180“安全散列标准”(SHS)。
SHA设计的初衷是用在数字签名中。为了满足美国政府应用对安全性更强的哈希算法的需求而做出的改进。