f
This commit is contained in:
38
internal/infrastructure/external/nuoer/crypto.go
vendored
Normal file
38
internal/infrastructure/external/nuoer/crypto.go
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
package nuoer
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Sign 根据 body 业务参数与 secret 生成 MD5 签名。
|
||||
// 规则:排除空值参数,按 key 的 ASCII 升序排序,拼接「参数名+参数值」后追加 secret,再 MD5(小写十六进制)。
|
||||
func Sign(body map[string]string, secret string) string {
|
||||
if len(body) == 0 {
|
||||
return genMD5(secret)
|
||||
}
|
||||
|
||||
keys := make([]string, 0, len(body))
|
||||
for k, v := range body {
|
||||
if strings.TrimSpace(v) == "" {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
var sb strings.Builder
|
||||
for _, k := range keys {
|
||||
sb.WriteString(k)
|
||||
sb.WriteString(body[k])
|
||||
}
|
||||
sb.WriteString(secret)
|
||||
return genMD5(sb.String())
|
||||
}
|
||||
|
||||
func genMD5(s string) string {
|
||||
sum := md5.Sum([]byte(s))
|
||||
return hex.EncodeToString(sum[:])
|
||||
}
|
||||
Reference in New Issue
Block a user