全文检索常用 Hash 函数介绍

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++。