讀者指南:
哈希和隨機數的概念
哈希算法分類:
FNV算法
FNV-1和FNV-1a算法對於最終生成的哈希值(hash)有一定限制
1,hash是無符號整型
2,hash的位數(bits),應該是2的n次方(32,64),一般32位的就夠用了。
相關變量:
hash值:一個n位的unsigned int型hash值
offset_basis:初始的哈希值
FNV_prime:FNV用於散列的質數
octet_of_data:8位數據(即一個字節)
FNV-1描述:
hash = offset_basis
for each octet_of_data to be hashed
hash = hash * FNV_prime
hash = hash xor octet_of_data
return hash
FNV-1a描述:
hash = offset_basis
for each octet_of_data to be hashed
hash = hash xor octet_of_data
hash = hash * FNV_prime
return hash
FNV特點說明
FNV-1a和FNV-1的唯一區別就是xor和multiply的順序不同,他們所采用的FNV_prime和offset_basis都相同,有人認為FNV-1a在進行小數據(小於4個字節)哈希時有更好的性能。
FNV_prime的取值:
32 bit FNV_prime = 2^24 + 2^8 + 0x93 = 16777619
64 bit FNV_prime = 2^40 + 2^8 + 0xb3 = 1099511628211
offset_basis的取值:
32 bit offset_basis = 2166136261
64 bit offset_basis = 14695981039346656037