目录
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
965930312949666949800943540071631046609041874567263789610837432943446265799458293219771643844981305189220653980578449 5328239340083876191928701583869517785
1024
1419779506494762106872207064140321832088062279544193396087847491461758272325 22967323037177221508640965212023555493 65628174669108571814760471015076148029 75596980407732015769245856300321530495 71501574036444603635505054127112859663 61610267868082893823963790439336411086 884584107735010676915
2. FNV_prime
还没有看懂,不过这不影响我们实现通用32位,64位的FNV算法
位数
十进制值
32
16777619
64
1099511628211
128
309485009821345068724781371
256
374144419156711147060143317175368453031918731002211
512
35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759
1024
5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573
3. hash
hash后的最总结果
4. byte_of_data
8位无符号整数
5. hashed
要加密的数据,需要转换成byte_of_data[]然后循环^计算