Пакет hash
Обзор
Пакет hash предоставляет интерфейсы для хеш-функций.
Пример (BinaryMarshaler)
Код:
const (
input1 = "The tunneling gopher digs downwards, "
input2 = "unaware of what he will find."
)
first := sha256.New()
first.Write([]byte(input1))
marshaler, ok := first.(encoding.BinaryMarshaler)
if !ok {
log.Fatal("first does not implement encoding.BinaryMarshaler")
}
state, err := marshaler.MarshalBinary()
if err != nil {
log.Fatal("unable to marshal hash:", err)
}
second := sha256.New()
unmarshaler, ok := second.(encoding.BinaryUnmarshaler)
if !ok {
log.Fatal("second does not implement encoding.BinaryUnmarshaler")
}
if err := unmarshaler.UnmarshalBinary(state); err != nil {
log.Fatal("unable to unmarshal hash:", err)
}
first.Write([]byte(input2))
second.Write([]byte(input2))
fmt.Printf("%x\n", first.Sum(nil))
fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil)))
Вывод:
57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52 true
Указатель
Примеры
Файлы пакета
hash.go
тип Cloner 1.25
Cloner — это хеш-функция, состояние которой можно клонировать, получая значение с эквивалентным и независимым состоянием.
Все реализации Hash в стандартной библиотеке реализуют этот интерфейс, если не задано GOFIPS140=v1.0.0.
Если возможность клонирования хеша можно определить только во время выполнения (например, если он оборачивает другой хеш), Clone может вернуть ошибку, обёрнутую в errors.ErrUnsupported. В противном случае Clone всегда должен возвращать nil в качестве ошибки.
type Cloner interface {
Hash
Clone() (Cloner, error)
} тип Hash
Hash — это общий интерфейс, реализуемый всеми хеш-функциями.
Реализации Hash в стандартной библиотеке (например, hash/crc32 и crypto/sha256) реализуют интерфейсы encoding.BinaryMarshaler, encoding.BinaryAppender, encoding.BinaryUnmarshaler и Cloner. Сериализация реализации хеша позволяет сохранить её внутреннее состояние и позднее использовать для дальнейшей обработки без повторной записи в хеш уже записанных данных. Состояние хеша может содержать части входных данных в исходном виде, поэтому пользователям следует учитывать возможные последствия для безопасности.
Совместимость: любые будущие изменения пакетов hash или crypto будут стремиться сохранять совместимость с состоянием, закодированным с помощью предыдущих версий. То есть любые выпущенные версии пакетов должны иметь возможность декодировать данные, записанные любой ранее выпущенной версией, с учётом таких обстоятельств, как исправления безопасности. Дополнительные сведения см. в документе о совместимости Go: https://golang.org/doc/go1compat
type Hash interface {
// Write (via the embedded io.Writer interface) adds more data to the running hash.
// It never returns an error.
io.Writer
// Sum appends the current hash to b and returns the resulting slice.
// It does not change the underlying hash state.
Sum(b []byte) []byte
// Reset resets the Hash to its initial state.
Reset()
// Size returns the number of bytes Sum will return.
Size() int
// BlockSize returns the hash's underlying block size.
// The Write method must be able to accept any amount
// of data, but it may operate more efficiently if all writes
// are a multiple of the block size.
BlockSize() int
} тип Hash32
Hash32 — это общий интерфейс, реализуемый всеми 32-битными хеш-функциями.
type Hash32 interface {
Hash
Sum32() uint32
} тип Hash64
Hash64 — это общий интерфейс, реализуемый всеми 64-битными хеш-функциями.
type Hash64 interface {
Hash
Sum64() uint64
} тип XOF 1.25
XOF (функция с расширяемым выходом) — это хеш-функция с произвольной или неограниченной длиной выходных данных.
type XOF interface {
// Write absorbs more data into the XOF's state. It panics if called
// after Read.
io.Writer
// Read reads more output from the XOF. It may return io.EOF if there
// is a limit to the XOF output length.
io.Reader
// Reset resets the XOF to its initial state.
Reset()
// BlockSize returns the XOF's underlying block size.
// The Write method must be able to accept any amount
// of data, but it may operate more efficiently if all writes
// are a multiple of the block size.
BlockSize() int
} Подкаталоги
| Название | Краткое описание |
|---|---|
| .. | |
| adler32 | Пакет adler32 реализует контрольную сумму Adler-32. |
| crc32 | Пакет crc32 реализует 32-битную циклическую избыточную контрольную сумму CRC-32. |
| crc64 | Пакет crc64 реализует 64-битную циклическую избыточную контрольную сумму CRC-64. |
| fnv | Пакет fnv реализует некриптографические хеш-функции FNV-1 и FNV-1a, созданные Гленном Фаулером, Лэндоном Кёртом Ноллом и Фонг Во. |
| maphash | Пакет maphash предоставляет хеш-функции для последовательностей байтов и сравнимых значений. |
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/hash/