Функция fnv.New128a

Функция fnv.New128a из пакета crypto/fnv возвращает новый объект, реализующий интерфейс hash.Hash для вычисления 128-битной хеш-суммы по алгоритму FNV-1a. Этот алгоритм отличается от стандартного FNV-1 тем, что операция XOR выполняется до умножения, что дает лучшее распределение хешей. Функция не принимает никаких параметров и всегда возвращает новый экземпляр хеша с начальным состоянием.

Синтаксис

gofnv.New128a()

Пример

Давайте вычислим хеш для строки "hello world":

gopackage main

import (
  "crypto/fnv"
  "fmt"
)

func main() {
  h := fnv.New128a()
  h.Write([]byte("hello world"))
  res := h.Sum(nil)
  fmt.Printf("%x", res)
}

Результат выполнения кода:

go"779a65e7023cdb7c3fc39c2b6c3b4f60"

Пример

Вычислим хеш для строки "12345" и выведем его в виде слайса байт:

gopackage main

import (
  "crypto/fnv"
  "fmt"
)

func main() {
  h := fnv.New128a()
  h.Write([]byte("12345"))
  res := h.Sum(nil)
  fmt.Println(res)
}

Результат выполнения кода:

go"[0 0 0 0 0 0 0 0 24 48 177 91 215 42 131 60]"

Пример

Используем метод Sum для получения хеша в виде 16-байтового слайса без изменения состояния:

gopackage main

import (
  "crypto/fnv"
  "fmt"
)

func main() {
  h := fnv.New128a()
  h.Write([]byte("abcde"))
  res := h.Sum(make([]byte, 0, 16))
  fmt.Printf("%x", res)
}

Результат выполнения кода:

go"5372dc3b7fecbcff3649a01f41d06b3d"

Смотрите также

  • функцию fnv.New128,
    которая создает хеш FNV-1 на 128 бит
  • функцию fnv.New32a,
    которая создает 32-битный хеш FNV-1a
  • функцию fnv.New64a,
    которая создает 64-битный хеш FNV-1a
  • интерфейс hash.Hash,
    который реализует возвращаемый объект