РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1216 of 1593 menu

Интерфейс hash.Hash32

Интерфейс hash.Hash32 предназначен для вычисления 32-битных хеш-сумм. Он объединяет методы интерфейса hash.Hash с дополнительным методом Sum32, который возвращает хеш в виде 32-битного целого числа без знака. Этот интерфейс реализуется многими хеш-алгоритмами, такими как CRC32, Adler-32 и FNV-32.

Синтаксис

type Hash32 interface { hash.Hash Sum32() uint32 }

Метод Sum32 возвращает текущее значение хеша как число типа uint32, не изменяя при этом состояние хеша. Это позволяет продолжать запись данных после получения промежуточного результата.

Пример использования с CRC32

Давайте вычислим 32-битный хеш CRC32 для строки "abcde" с использованием стандартной таблицы IEEE:

package main import ( "crypto/crc32" "fmt" "hash" ) func main() { var h hash.Hash32 = crc32.NewIEEE() h.Write([]byte("abcde")) res := h.Sum32() fmt.Println(res) }

Результат выполнения кода:

858411673

Пример с FNV-32

Вычислим 32-битный хеш FNV-1a для строки "12345":

package main import ( "crypto/fnv" "fmt" "hash" ) func main() { var h hash.Hash32 = fnv.New32a() h.Write([]byte("12345")) res := h.Sum32() fmt.Println(res) }

Результат выполнения кода:

1391780666

Пример с промежуточным хешем

Покажем, что Sum32 не сбрасывает состояние хеша, и его можно вызывать несколько раз:

package main import ( "crypto/adler32" "fmt" "hash" ) func main() { var h hash.Hash32 = adler32.New() h.Write([]byte("a")) first := h.Sum32() h.Write([]byte("bcde")) second := h.Sum32() fmt.Println(first, second) }

Результат выполнения кода:

65537 858411673

Сброс состояния хеша

Метод Reset сбрасывает состояние хеша в начальное значение, позволяя переиспользовать объект для новых вычислений:

package main import ( "crypto/crc32" "fmt" "hash" ) func main() { var h hash.Hash32 = crc32.NewIEEE() h.Write([]byte("abcde")) first := h.Sum32() h.Reset() h.Write([]byte("12345")) second := h.Sum32() fmt.Println(first, second) }

Результат выполнения кода:

858411673 2611413777

Смотрите также

  • интерфейс hash.Hash,
    базовый интерфейс для всех хеш-функций
  • интерфейс hash.Hash64,
    расширяет базовый интерфейс для 64-битных хешей
  • функцию crc32.NewIEEE,
    создает новый хеш CRC32 с таблицей IEEE
  • функцию fnv.New32a,
    создает новый хеш FNV-1a для 32-битных хешей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить