💥更换客户端签名算法

This commit is contained in:
孙晓龙
2024-01-17 20:10:20 +08:00
parent 2e291511fb
commit 4feff8866f
3 changed files with 135 additions and 0 deletions

41
utils/md5.go Normal file
View File

@@ -0,0 +1,41 @@
package utils
/***************************************************
** @Desc : 获取一个md5的字符串
** @Time : 2019/8/9 16:06
** @Author : yuebin
** @File : md5
** @Last Modified by : yuebin
** @Last Modified time: 2019/8/9 16:06
** @Software: GoLand
****************************************************/
import (
"crypto/md5"
"encoding/hex"
"strings"
)
// GetMD5LOWER 获取小写的MD5
func GetMD5LOWER(s string) string {
h := md5.New()
h.Write([]byte(s))
return hex.EncodeToString(h.Sum(nil))
}
// GetMD5Upper 获取大写的MD5
func GetMD5Upper(s string) string {
return strings.ToUpper(GetMD5LOWER(s))
}
// MapToString 将map数据变成key=value形式的字符串
func MapToString(m map[string]string) string {
res := ""
for k, v := range m {
res = res + k + "=" + v + "&"
}
suffix := strings.TrimSuffix(res, "&")
return suffix
}

68
utils/sign_verify.go Normal file
View File

@@ -0,0 +1,68 @@
package utils
import (
"strings"
)
func GetMD5Sign(params map[string]string, keys []string, paySecret string) string {
str := ""
for i := 0; i < len(keys); i++ {
k := keys[i]
if len(params[k]) == 0 || k == "sign" {
continue
}
str += k + "=" + params[k] + "&"
}
str += "paySecret=" + paySecret
sign := GetMD5Upper(str)
return sign
}
func GetMD5SignLower(params map[string]string, keys []string, paySecret string) string {
return strings.ToLower(GetMD5Sign(params, keys, paySecret))
}
func GetMD5SignMF(params map[string]string, paySecret string) string {
strArr := SortMap(params)
signStr := ""
for i := 0; i < len(strArr); i++ {
k := strArr[i]
if len(params[k]) == 0 {
signStr += k
} else {
signStr += k + params[k]
}
}
signStr += paySecret
return GetMD5LOWER(signStr)
}
func Md5Verify(params map[string]string, paySecret string) bool {
sign := params["sign"]
if sign == "" {
return false
}
delete(params, "sign")
keys := SortMap(params)
tmpSign := GetMD5Sign(params, keys, paySecret)
if tmpSign != sign {
return false
} else {
return true
}
}
func Md5MFVerify(params map[string]string, paySecret string) bool {
sign := params["sign"]
if sign == "" {
return false
}
delete(params, "sign")
tmpSign := GetMD5SignMF(params, paySecret)
if tmpSign != sign {
return false
} else {
return true
}
}

26
utils/sort_go.go Normal file
View File

@@ -0,0 +1,26 @@
package utils
import (
"sort"
)
// SortMap 对map的key值进行排序
func SortMap(m map[string]string) []string {
var arr []string
for k := range m {
arr = append(arr, k)
}
sort.Strings(arr)
return arr
}
// SortMapByKeys 按照key的ascii值从小到大给map排序
func SortMapByKeys(m map[string]string) map[string]string {
keys := SortMap(m)
tmp := make(map[string]string)
for _, key := range keys {
tmp[key] = m[key]
}
return tmp
}