Spec-Zone.ru › Go

Пакет hash

  • import "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
  • тип Hash32
  • тип Hash64

Примеры

Пакет (BinaryMarshaler)

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API