FNV哈希算法


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[]然后循環^計算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM