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[:]) }