Пакет 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
тип Hash
Hash — общий интерфейс, реализуемый всеми хеш-функциями.
Реализации Hash в стандартной библиотеке (например, hash/crc32 и crypto/sha256) реализуют интерфейсы encoding.BinaryMarshaler и encoding.BinaryUnmarshaler. Маршаллинг реализации хеш-функции позволяет сохранить её внутреннее состояние и использовать его для дальнейшей обработки, без необходимости повторного вычисления данных, ранее записанных в хеш-функцию. Состояние хеш-функции может содержать части входных данных в исходной форме, с которыми пользователям необходимо работать, учитывая все возможные последствия для безопасности.
Совместимость: Любые будущие изменения в пакетах 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
} Подкаталоги
| Имя | Синопсис |
|---|---|
| .. | |
| 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/