Функция fnv.New64a
Функция fnv.New64a создает новый объект для вычисления
хеш-суммы по алгоритму FNV-1a с разрядностью 64 бита.
В отличие от алгоритма FNV-1, в FNV-1a операция XOR
выполняется до умножения на простое число, что делает
алгоритм более устойчивым к коллизиям. Функция возвращает
интерфейс hash.Hash64, который реализует все методы
стандартного интерфейса hash.Hash, а также метод
Sum64 для получения хеша в виде uint64.
Синтаксис
func New64a() hash.Hash64
Функция не принимает параметров и возвращает новый объект
хеширования, реализующий интерфейс hash.Hash64.
Пример
Давайте вычислим хеш для строки "abcde" с использованием алгоритма FNV-1a 64 бита:
package main
import (
"fmt"
"hash/fnv"
)
func main() {
h := fnv.New64a()
h.Write([]byte("abcde"))
res := h.Sum64()
fmt.Println(res)
}
Результат выполнения кода:
15817220661460363384
Пример
Давайте вычислим хеш для строки "12345" с помощью
метода Sum, который возвращает срез байтов:
package main
import (
"fmt"
"hash/fnv"
)
func main() {
h := fnv.New64a()
h.Write([]byte("12345"))
res := h.Sum(nil)
fmt.Printf("%x\n", res)
}
Результат выполнения кода:
"f0bf98b2216c1d48"
Пример
Продемонстрируем возможность последовательной записи данных в хеш-объект:
package main
import (
"fmt"
"hash/fnv"
)
func main() {
h := fnv.New64a()
h.Write([]byte("abc"))
h.Write([]byte("de"))
res := h.Sum64()
fmt.Println(res)
}
Результат выполнения кода:
15817220661460363384
Обратите внимание, что хеш для последовательной записи "abc" и "de" совпадает с хешем для строки "abcde", так как данные записываются в том же порядке.
Смотрите также
-
функцию
fnv.New32,
которая создает хеш FNV-1 32 бита -
функцию
fnv.New32a,
которая создает хеш FNV-1a 32 бита -
функцию
fnv.New64,
которая создает хеш FNV-1 64 бита -
функцию
fnv.New128,
которая создает хеш FNV-1 128 бит