58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
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
|
||
}
|