FNV算法属于非密码学哈希函数,它最初由Glenn Fowler和Kiem-Phong Vo于1991年在IEEE POSIX P1003.2上首先提出,最后由Landon Curt Noll 完善,故该算法以三人姓的首字母命名。

    FNV算法目前有三种,分别是FNV-1,FNV-1a和FNV-0,但是FNV-0算法已经被丢弃了。FNV算法的哈希结果有32、64、128、256、512和1024位等长度。如果需要哈希结果长度不属于以上任意一种,也可以采用根据Changing the FNV hash size - xor-folding上面的指导进行变换得到。

    func New128() hash.Hash
    func New128a() hash.Hash
    func New32() hash.Hash32
    func New32a() hash.Hash32
    func New64() hash.Hash64
    func New64a() hash.Hash64

    1. func fnv32(key string) uint32 {
    2. h := fnv.New32a()
    3. h.Write([]byte(key))
    4. return h.Sum32()
    5. }
    6. func main() {
    7. fmt.Println(fnv32("hello1")) // 4052956782
    8. }