哈希算法在我们生活中的应用十分广泛,被广泛应用于信息安全、数据校验、身份认证等领域。而哈希算法也不是只有SHA家族、MD家族,还有比较小众的哈希家族,下面我们就来了解一下FNV Hash算法。
FNV Hash算法简介
FNV Hash算法的全称为Fowler-Noll-Vo算法,它是以三维发明人Glenn Fowler、Landon Curt Noll和Phong Vo的名字来命名的。
第一版FNV Hash算法是在1991年提出的,而目前,FNV Hash算法拥有3个版本,分别是FNV-0(已废弃)、FNV-1以及FNV-1a。这3个算法的结构十分相似,只是更换了计算步骤。
FNV Hash的算法结构
总体来说,FNV-0、FNV-1以及FNV-1a都有两个参数,第一个是OFFSET(初始的哈希值),第二个是一个PRIME(素数)。
对于FNV-0来说,OFFSET为0,PRIME和FNV-1一致,其计算流程也和FNV-1一致。而FNV-1和FNV-1a的区别在于先算异或还是先算乘法,其他的方面也都相同。FNV-1和FNV-1a算法流程如下图所示:
FNV-1a相比FNV-1,散列分布更好,也有人认为FNV-1a在进行小数据(小于4个字节)哈希时有更好的性能。但它们对于最终生成的哈希值都有一定限制:
- hash是无符号整型;
- hash的位数(bits),应该是2的n次方(32,64,128,256……),一般来说,32位的就够用了。
FNV Hash算法的优缺点
FNV Hash算法计算耗时少,效率高,它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串,比如IP地址、URL、文件名等等。
但是在数据量较大的运算场景中,由于缺乏良好的散列分布性能,使其不能够在音频等有声内容检索时对数据进行准确定位。
免责声明:素材源于网络,如有侵权,请联系删稿。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。