💥更换客户端签名算法
This commit is contained in:
41
utils/md5.go
Normal file
41
utils/md5.go
Normal 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
68
utils/sign_verify.go
Normal 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
26
utils/sort_go.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user