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.
46 lines
912 B
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))
|
|
}
|
|
|