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

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

Интерфейс hash.Hash из пакета crypto предоставляет общий способ вычисления хеш-суммы для различных алгоритмов, таких как MD5, SHA-1, SHA-256 и других. Он реализует интерфейс io.Writer, что позволяет записывать данные через Write, а затем получать итоговый хеш через метод Sum. Метод Reset возвращает хеш в исходное состояние для повторного использования, а метод Size возвращает длину хеша в байтах.

Синтаксис

type Hash interface { io.Writer Sum(b []byte) []byte Reset() Size() int BlockSize() int }

Метод Write

Метод Write добавляет данные в хеш. Он возвращает количество записанных байт и ошибку. Этот метод реализует интерфейс io.Writer, поэтому хеш можно использовать с функциями, которые работают с io.Writer.

Метод Sum

Метод Sum возвращает текущее хеш-значение в виде среза байт. Если передать существующий срез, он будет использован как основа для результата. Обычно передают nil, чтобы получить новый срез.

Метод Reset

Метод Reset сбрасывает состояние хеша, позволяя повторно использовать тот же объект для вычисления нового хеша без создания нового экземпляра.

Метод Size

Метод Size возвращает длину хеша в байтах. Например, для SHA-256 это 32 байта, а для SHA-1 — 20 байт.

Пример использования SHA-256

Давайте вычислим хеш SHA-256 для строки "hello world":

package main import ( "crypto/sha256" "fmt" ) func main() { h := sha256.New() h.Write([]byte("hello world")) res := h.Sum(nil) fmt.Printf("%x\n", res) }

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

"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"

Пример с несколькими Write

Метод Write можно вызывать несколько раз для постепенной обработки данных:

package main import ( "crypto/sha256" "fmt" ) func main() { h := sha256.New() h.Write([]byte("hello ")) h.Write([]byte("world")) res := h.Sum(nil) fmt.Printf("%x\n", res) }

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

"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"

Пример с Reset

С помощью метода Reset можно переиспользовать объект хеша для вычисления нового значения:

package main import ( "crypto/sha256" "fmt" ) func main() { h := sha256.New() h.Write([]byte("first")) res1 := h.Sum(nil) h.Reset() h.Write([]byte("second")) res2 := h.Sum(nil) fmt.Printf("%x\n", res1) fmt.Printf("%x\n", res2) }

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

"8c080f02f1ee04caf527152140c02de23e0118f3b96044993e10a4721ec6b47f" "60b2518fa748b2c46b3a42a5a8ff232cd6c87f0137e6ad05bbbe8119d06f0017"

Пример с MD5

Интерфейс hash.Hash используется всеми хеш-функциями в пакете crypto. Вот пример с MD5:

package main import ( "crypto/md5" "fmt" ) func main() { h := md5.New() h.Write([]byte("hello world")) res := h.Sum(nil) fmt.Printf("%x\n", res) }

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

"5eb63bbbe01eeed093cb22bb8f5acdc3"

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

  • интерфейс hash.Hash32,
    который вычисляет 32-битные хеш-суммы
  • интерфейс hash.Hash64,
    который вычисляет 64-битные хеш-суммы
  • функцию md5.New,
    которая создает новый хеш MD5
  • функцию sha256.New,
    которая создает новый хеш SHA-256
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить