Пакет maphash
Обзор
Пакет maphash предоставляет хеш-функции для последовательностей байтов и сравнимых значений. Эти хеш-функции предназначены для использования в реализациях хеш-таблиц или других структур данных, которые нуждаются в отображении произвольных строк или последовательностей байтов на равномерное распределение по беззнаковым 64-битным целым числам. Каждый экземпляр хеш-таблицы или структуры данных должен использовать свой собственный Seed.
Хеш-функции не являются криптографически защищенными. (См. crypto/sha256 и crypto/sha512 для криптографического использования.)
Пример
Код:
// The zero Hash value is valid and ready to use; setting an
// initial seed is not necessary.
var h maphash.Hash
// Add a string to the hash, and print the current hash value.
h.WriteString("hello, ")
fmt.Printf("%#x\n", h.Sum64())
// Append additional data (in the form of a byte array).
h.Write([]byte{'w', 'o', 'r', 'l', 'd'})
fmt.Printf("%#x\n", h.Sum64())
// Reset discards all data previously added to the Hash, without
// changing its seed.
h.Reset()
// Use SetSeed to create a new Hash h2 which will behave
// identically to h.
var h2 maphash.Hash
h2.SetSeed(h.Seed())
h.WriteString("same")
h2.WriteString("same")
fmt.Printf("%#x == %#x\n", h.Sum64(), h2.Sum64())
Индекс
Примеры
Файлы пакета
maphash.go maphash_runtime.go
func Bytes 1.19
func Bytes(seed Seed, b []byte) uint64
Bytes возвращает хеш b с заданным seed.
Bytes эквивалентен, но более удобен и эффективен, чем:
var h Hash h.SetSeed(seed) h.Write(b) return h.Sum64()
func Comparable 1.24
func Comparable[T comparable](seed Seed, v T) uint64
Comparable возвращает хеш сравнимого значения v с заданным seed таким образом, что Comparable(s, v1) == Comparable(s, v2), если v1 == v2. Если v != v, то полученный хеш равномерно распределён случайным образом.
func String 1.19
func String(seed Seed, s string) uint64
String возвращает хеш s с заданным seed.
String эквивалентен, но более удобен и эффективен, чем:
var h Hash h.SetSeed(seed) h.WriteString(s) return h.Sum64()
func WriteComparable 1.24
func WriteComparable[T comparable](h *Hash, x T)
WriteComparable добавляет x к данным, хешируемым h.
тип Hash 1.14
Hash вычисляет хеш последовательности байтов с заданным seed.
Нулевой Hash является валидным Hash, готовым к использованию. Нулевой Hash выбирает случайный seed для себя во время первого вызова метода Reset, Write, Seed или Sum64. Для управления seed используйте SetSeed.
Вычисленные хеш-значения зависят только от начального seed и последовательности байтов, предоставленных объекту Hash, а не от способа их предоставления. Например, три последовательности
h.Write([]byte{'f','o','o'})
h.WriteByte('f'); h.WriteByte('o'); h.WriteByte('o')
h.WriteString("foo")
все имеют одинаковый эффект.
Хеши предназначены для устойчивости к коллизиям, даже в ситуациях, когда злоумышленник контролирует последовательности байтов, которые хешируются.
Hash не безопасен для одновременного использования несколькими горутинами, но Seed безопасен. Если несколько горутин должны вычислить один и тот же хеш с заданным seed, каждая может объявить свой собственный Hash и вызвать SetSeed со общим Seed.
type Hash struct {
// contains filtered or unexported fields
}
func (*Hash) BlockSize 1.14
func (h *Hash) BlockSize() int
BlockSize возвращает размер блока h.
func (*Hash) Reset 1.14
func (h *Hash) Reset()
Reset отбрасывает все байты, добавленные к h. (Seed остаётся тем же.)
func (*Hash) Seed 1.14
func (h *Hash) Seed() Seed
Seed возвращает значение seed h.
func (*Hash) SetSeed 1.14
func (h *Hash) SetSeed(seed Seed)
SetSeed устанавливает h для использования seed, который должен был быть возвращён методом MakeSeed или другим методом Hash.Seed. Два объекта Hash с одинаковым seed ведут себя идентично. Два объекта Hash с разными seed, очень вероятно, будут вести себя по-разному. Любые байты, добавленные в h до этого вызова, будут отброшены.
func (*Hash) Size 1.14
func (h *Hash) Size() int
Size возвращает размер значения хеша h, 8 байт.
func (*Hash) Sum 1.14
func (h *Hash) Sum(b []byte) []byte
Sum добавляет текущее 64-битное значение хеша к b. Оно существует для реализации hash.Hash. Для прямых вызовов, использование Hash.Sum64 более эффективно.
func (*Hash) Sum64 1.14
func (h *Hash) Sum64() uint64
Sum64 возвращает текущее 64-битное значение h, которое зависит от seed h и последовательности байтов, добавленных к h с момента последнего вызова Hash.Reset или Hash.SetSeed.
Все биты результата Sum64 приблизительно равномерно и независимо распределены, поэтому его можно безопасно уменьшить, используя побитовые маски, сдвиги или модульную арифметику.
func (*Hash) Write 1.14
func (h *Hash) Write(b []byte) (int, error)
Write добавляет b к последовательности байтов, хешируемых h. Он всегда записывает все b и никогда не терпит неудачу; счёт и результат ошибки предназначены для реализации io.Writer.
func (*Hash) WriteByte 1.14
func (h *Hash) WriteByte(b byte) error
WriteByte добавляет b к последовательности байтов, хешируемых h. Он никогда не терпит неудачу; результат ошибки предназначен для реализации io.ByteWriter.
func (*Hash) WriteString 1.14
func (h *Hash) WriteString(s string) (int, error)
WriteString добавляет байты s к последовательности байтов, хешируемых h. Он всегда записывает все s и никогда не терпит неудачу; счёт и результат ошибки предназначены для реализации io.StringWriter.
тип Seed 1.14
Seed — это случайное значение, которое выбирает конкретную хеш-функцию, вычисляемую объектом Hash. Если два Hash используют одинаковые Seed, они будут вычислять одинаковые хеш-значения для любого заданного входного значения. Если два Hash используют разные Seed, они, скорее всего, будут вычислять различные хеш-значения для любого заданного входного значения.
Seed должен быть инициализирован вызовом MakeSeed. Нулевое значение seed неинициализировано и не является допустимым для использования в методе SetSeed объекта Hash.
Каждое значение Seed локально для одного процесса и не может быть сериализовано или каким-либо образом восстановлено в другом процессе.
type Seed struct {
// contains filtered or unexported fields
}
func MakeSeed 1.14
func MakeSeed() Seed
MakeSeed возвращает новый случайный seed.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/hash/maphash/