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

Указатель

  • тип Cloner
  • тип Hash
  • тип Hash32
  • тип Hash64
  • тип XOF

Примеры

Пакет (BinaryMarshaler)

Файлы пакета

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/

Spec-Zone.ru

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