hmac算法

‌ HMAC (Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码算法‌,用于验证数据的完整性和认证消息的发送者。HMAC结合了哈希函数和密钥,通过将密钥与消息进行哈希运算来生成消息认证码‌

HMAC的工作原理
HMAC使用一个密钥和一个哈希函数(如MD5、SHA-1、SHA-256等)生成一个固定长度的哈希值。具体步骤如下:

‌输入‌:消息和密钥。
‌处理‌:HMAC对输入的消息和密钥进行哈希处理,生成一个固定长度的哈希值。
‌输出‌:该哈希值即为HMAC签名‌

HMAC的安全性
HMAC的安全性依赖于密钥的保密性和所使用的哈希函数的抗碰撞能力。只有持有密钥的一方能够生成或验证该消息的签名,从而确保消息在传输过程中没有被篡改‌

HMAC的应用场景
HMAC广泛应用于各种需要确保数据完整性和认证的应用场景中,例如:

‌ IPSec ‌:在IPSec中,HMAC用于验证IP数据包的完整性和真实性。
‌ SSL/TLS ‌:在SSL/TLS协议中,HMAC用于验证通信双方的身份和数据完整性。
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "fmt"
)

func GenHmacSha256(message string, secret string) string {
    h := hmac.New(sha256.New, []byte(secret))
    h.Write([]byte(message))
    return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

func main() {

    key := "VHc1CBWM0YS204rydm+wWxkQrqJSVyXAAgFRktVpOF4="
    str := "/report/data/device?timestamp=123456789&appKey=9aON8USr&nonce=123456"
    ret := GenHmacSha256(str, key)

    fmt.Printf("ret: %s\n", ret)
}

//RdYq6cvBpeF84HO8iQErRF6Aq9XdE2fDx5w4qjDWfrg=
//RdYq6cvBpeF84HO8iQErRF6Aq9XdE2fDx5w4qjDWfrg=
//6D+MQzWc3eU4eqZkXaUQ4xmeviQPljjzs4CQmF18ldk=
//6D+MQzWc3eU4eqZkXaUQ4xmeviQPljjzs4CQmF18ldk=