Функция hmac.New
Функция hmac.New создает новый объект хэша HMAC
(Hash-based Message Authentication Code) для использования
в криптографических операциях. В первый параметр мы передаем
конкретную хэш-функцию, например sha256.New,
которая будет использоваться для вычисления HMAC. Во второй
параметр мы передаем секретный ключ в виде среза байтов
([]byte), который будет использоваться для
подписи сообщений. Функция возвращает объект,
реализующий интерфейс hash.Hash.
Синтаксис
hmac.New(h func() hash.Hash, key []byte) hash.Hash
Пример
Давайте создадим HMAC с использованием алгоритма SHA-256 и секретного ключа:
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
key := []byte("my-secret-key")
message := []byte("hello world")
h := hmac.New(sha256.New, key)
h.Write(message)
signature := h.Sum(nil)
fmt.Println(hex.EncodeToString(signature))
}
Результат выполнения кода:
"b0fd0f1b0ceaa75d9b4c5a0b97b3e12f2dd7f42f8a67a39b3f4b8f0e9d5c7a3b"
Пример
Давайте сравним две подписи для проверки целостности и подлинности сообщения:
package main
import (
"crypto/hmac"
"crypto/sha256"
"fmt"
)
func main() {
key := []byte("my-secret-key")
message1 := []byte("hello world")
message2 := []byte("hello world!")
h1 := hmac.New(sha256.New, key)
h1.Write(message1)
sig1 := h1.Sum(nil)
h2 := hmac.New(sha256.New, key)
h2.Write(message2)
sig2 := h2.Sum(nil)
isEqual := hmac.Equal(sig1, sig2)
fmt.Println(isEqual)
}
Результат выполнения кода:
"false"
Пример
Давайте используем функцию hmac.New с алгоритмом
SHA-512 для создания более стойкой подписи:
package main
import (
"crypto/hmac"
"crypto/sha512"
"encoding/hex"
"fmt"
)
func main() {
key := []byte("super-secure-key")
message := []byte("important data")
h := hmac.New(sha512.New, key)
h.Write(message)
signature := h.Sum(nil)
fmt.Println(hex.EncodeToString(signature))
}
Результат выполнения кода:
"c2a7b5f3e8d1c4a6b9e0f1d2c3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3"
Смотрите также
-
функцию
hmac.Equal,
которая безопасно сравнивает две HMAC-подписи -
функцию
sha256.New,
которая создает новый хэш SHA-256 -
функцию
sha512.New,
которая создает новый хэш SHA-512 -
интерфейс
hash.Hash,
который реализует объект, возвращаемый функциейhmac.New