FNV哈希算法

简介: 目录FNV哈希算法FNV版本算法实现FNV-0算法公式FNV-1算法公式FNV-1a算法公式FNV公式参数说明FNV哈希算法参考文档FNV版本FNV哈希分为3个版本:fnv-0(已废弃),FNV-1,FNV-1a算法实现FNV-0算法公式hash = 0...

目录

FNV哈希算法

参考文档

FNV版本

FNV哈希分为3个版本:fnv-0(已废弃),FNV-1,FNV-1a

算法实现

FNV-0算法公式

hash = 0
   for each byte_of_data to be hashed
        hash = hash * FNV_prime
        hash = hash ^ octet_of_data
return hash

FNV-1算法公式

hash = FNV_offset_basis
   for each byte_of_data to be hashed
        hash = hash * FNV_prime
        hash = hash ^ byte_of_data
return hash

FNV-1a算法公式

hash = FNV_offset_basis
   for each byte_of_data to be hashed
        hash = hash ^ byte_of_data
        hash = hash * FNV_prime
return hash

FNV公式参数说明

1. FNV_offset_basis

这个参数的值是固定的,根据不同的位数选择不同的值作为hash的首次填充值

位数 十进制值
32 2166136261
64 14695981039346656037
128 144066263297769815596495629667062367629
256 100029257958052580907070968620625704837092796014241193945225284501741471925557
512 965930312949666949800943540071631046609041874567263789610837432943446265799458
2932197716438449813051892206539805784495328239340083876191928701583869517785
1024 1419779506494762106872207064140321832088062279544193396087847491461758272325
2296732303717722150864096521202355549365628174669108571814760471015076148029
7559698040773201576924585630032153049571501574036444603635505054127112859663
61610267868082893823963790439336411086884584107735010676915

2. FNV_prime

还没有看懂,不过这不影响我们实现通用32位,64位的FNV算法

位数 十进制值
32 16777619
64 1099511628211
128 309485009821345068724781371
256 374144419156711147060143317175368453031918731002211
512 35835915874844867368919076489095108449946327955754392558399825615420669938882
575126094039892345713852759
1024 501645651011311865543459881103527895503076534540479074430301752383111205510814745
150915769222029538271616265187852689524938529229181652437508374669137180409427187
3160484737966720260389217684476157468082573

3. hash

hash后的最总结果

4. byte_of_data

8位无符号整数

5. hashed

要加密的数据,需要转换成byte_of_data[]然后循环^计算

目录
相关文章
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
54 3
|
15天前
|
算法 安全
散列值使用相同的哈希算法
当使用相同的哈希算法对相同的数据进行散列时,所产生的散列值(也称为哈希值或摘要)总是相同的。这是因为哈希算法是一种确定性的函数,它对于给定的输入将始终产生相同的输出。 例如,如果你用SHA-256算法对字符串"hello world"进行哈希处理,无论何时何地,只要输入是完全一样的字符串,你都会得到相同的160位(40个十六进制字符)的SHA-256散列值。 但是,需要注意的是,即使是输入数据的微小变化也会导致产生的散列值完全不同。此外,不同的哈希算法(如MD5、SHA-1、SHA-256等)会对相同的数据产生不同的散列值。 哈希算法的一个关键特性是它们的“雪崩效应”,即输入中的一点小小
27 4
|
2月前
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
|
2月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
46 0
|
2月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
4月前
|
算法 安全 JavaScript
安全哈希算法:SHA算法
安全哈希算法:SHA算法
86 1
安全哈希算法:SHA算法
|
4月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
616 1
|
5月前
|
缓存 负载均衡 算法
(四)网络编程之请求分发篇:负载均衡静态调度算法、平滑轮询加权、一致性哈希、最小活跃数算法实践!
先如今所有的技术栈中,只要一谈关于高可用、高并发处理相关的实现,必然会牵扯到集群这个话题,也就是部署多台服务器共同对外提供服务,从而做到提升系统吞吐量,优化系统的整体性能以及稳定性等目的。
|
6月前
|
存储 算法 安全
深入理解SHA系列哈希算法:安全性的保障与演进
深入理解SHA系列哈希算法:安全性的保障与演进
|
6月前
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
下一篇
DataWorks