Hash 函数一般会分为2 种,即Hash table 用的hash 和密码学上面应用的Hash。
这里分开介绍:
应用在Hash table 上的Hash 函数的一个主要特点是输出一般为32 或者64 位。
常见的算法有很多种,有关这些Hash 算法的实现代码。
密码学上的Hash函数
密码学上的Hash 函数第一重要的是其伪单向性。
故一般其计算都特别复杂,结果位数也很长。我们常见的Hash 函数有如下几个:
Adler-32:定义在rfc1950 里面,是一种乘法Hash 算法,结果是32 位整数;
CRC32:循环冗余码,结果是32 位整数;
MD 系列:md3, md4, md5 等,结果都是128 位整数;考虑到md5 冲突的易构造性,建议不要用它做重要消息签名;
RipedMd 系列:有128/160/256/320 位4 种规范,但RipedMd-256/320 没有被认真设计,其安全度和128/160 这2 种规范一样;
SHA 系列:有160/256/384/512 位4 种规范;
Tiger:192 位,专门为64 位机器优化;
WhirlPool:512 位。
这里,需要注意的是,美国的国家标准推荐使用如下几个Hash 算法:Ripe dMd 系列,SHA 系列,Tiger 和WhirlPool。具体的说明大家可以去看密码学相关书籍(推荐《密码学基础(英文版)》和《现代密码学理论与研究》)或者学习著名的开源库Crypto++。