daShangDao_planA/tool/sign.go

58 lines
1.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tool
import (
"crypto/md5"
"encoding/hex"
"fmt"
"planA/initialization/golabl"
"sort"
"strings"
)
// SignParams 对参数进行签名(类似支付宝、微信支付)
func SignParams(params map[string]string) string {
SecretKey := golabl.Config.Server.SignKey
// 1. 过滤空值
filteredParams := make(map[string]string)
for k, v := range params {
if v != "" && k != "sign" && k != "sign_type" {
filteredParams[k] = v
}
}
// 2. 排序
keys := make([]string, 0, len(filteredParams))
for k := range filteredParams {
keys = append(keys, k)
}
sort.Strings(keys)
// 3. 拼接字符串
var builder strings.Builder
for i, k := range keys {
if i > 0 {
builder.WriteString("&")
}
builder.WriteString(k)
builder.WriteString("=")
builder.WriteString(fmt.Sprintf("%v", filteredParams[k]))
}
// 4. 追加密钥并签名
queryStr := builder.String()
signStr := queryStr + "&key=" + SecretKey
// MD5签名常用
hash := md5.Sum([]byte(signStr))
return strings.ToUpper(hex.EncodeToString(hash[:]))
}
// VerifySign 验证签名
func VerifySign(params map[string]string) bool {
if sign, ok := params["sign"]; ok {
expectedSign := SignParams(params)
return expectedSign == sign
}
return false
}