Go 语言 hmac sha256 密钥生成
飞书和钉钉的加密方式不一样:
飞书是直接将组合的串加密,而钉钉是先加密密钥,再与组合的串生成密钥。
package util
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"fmt"
"hash"
"net/url"
"strconv"
)
// mode: 1.钉钉模式 2.飞书模式
func MakeHmacSha256Key(timestamp int64, secret string, mode int) string {
params := url.Values{}
if secret != "" {
sign := HmacSha256(timestamp, secret, mode)
params.Add("timestamp", strconv.FormatInt(timestamp, 10))
params.Add("sign", sign)
}
return params.Encode()
}
func HmacSha256(timestamp int64, secret string, mode int) string {
var h hash.Hash
stringToSign := fmt.Sprintf("%d\n%s", timestamp, secret)
if mode == 1 {
h = hmac.New(sha256.New, []byte(secret))
h.Write([]byte(stringToSign))
} else {
h = hmac.New(sha256.New, []byte(stringToSign))
h.Write(nil)
}
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}