Go в примерах: Хеш SHA1 (SHA1 Hashes)

Хеши SHA1 часто используются для вычисления коротких идентификаторов для двоичных или текстовых BLOB-объектов. Например, система контроля версий git широко использует SHA1 для идентификации версионных файлов и каталогов. Вот как вычислить хэши SHA1 в Go.

package main

Go реализует несколько хеш-функций в пакете crypto/*.

import (
    "crypto/sha1"
    "fmt"
)
func main() {
    s := "sha1 this string"

Для генерации хеша используется функция sha1.New(), sha1.Write(bytes), затем sha1.Sum([]byte{}). Тут мы создаем новый хеш.

    h := sha1.New()

В Write необходимо передать байты. Если у вас есть строка s, используйте []byte(s), чтобы привести ее к байтам.

    h.Write([]byte(s))

Получаем окончательный результат хеш-функции в виде байтового фрагмента. Аргумент в Sum добавляет к существующему фрагменту байты, но обычно он не используется.

    bs := h.Sum(nil)

Значения SHA1 часто печатаются в шестнадцатеричном формате, например, в git commit. Используйте %x для преобразования результатов хеширования в шестнадцатеричную строку.

    fmt.Println(s)
    fmt.Printf("%x\n", bs)
}

Запущенная программа вычисляет хеш и печатает его в удобочитаемом шестнадцатеричном формате.

$ go run sha1-hashes.go
sha1 this string
cf23df2207d99a74fbe169e3eba035e633b65d94

Вы можете вычислить другие хэши, используя шаблон, аналогичный показанному выше. Например, для вычисления хэшей MD5 импортируйте crypto/md5 и используйте md5.New().

Обратите внимание, что если вам нужны криптографически защищенные хэши, вы должны тщательно исследовать стойкость хэша!

Следующий пример: Кодирование Base64 (Base64 Encoding).