Интерфейс 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-битных хешей