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=