工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tools/request/signature.go

46 lines
912 B

package request
import (
"fmt"
"sort"
"strings"
)
type hashAlg interface {
Hash(str string) string
}
type signature struct {
secret string
alg hashAlg
}
func NewSignature(secret string, alg hashAlg) *signature {
return &signature{secret: secret, alg: alg}
}
// GenSignature 这里获取签名与前端传递的签名做对比,防止重复使用可以将其存入redis或者对比时间戳
func (s *signature) GenSignature(params map[string]string) string {
if params == nil {
return ""
}
keys := make([]string, 0, len(params))
// 获取所有key 按照ASSIC码升序
for k, v := range params {
// 空字符串不参与签名
if v == "" {
continue
}
keys = append(keys, k)
}
sort.Strings(keys)
signStr := ""
for _, k := range keys {
signStr += fmt.Sprintf("%s=%s&", k, params[k])
}
signStr = signStr + "key=" + s.secret
return strings.ToUpper(s.alg.Hash(signStr))
}