createZzSign.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package utilx
  2. import (
  3. "bytes"
  4. "crypto/md5"
  5. "encoding/hex"
  6. "fmt"
  7. "log"
  8. "sort"
  9. )
  10. // 转转签名方法
  11. func CreateZzSign(params map[string]interface{}, secretKey string) string {
  12. if len(params) == 0 {
  13. log.Println("参数为空,签名: 空字符串")
  14. return ""
  15. }
  16. // 将map转换为list,并按键排序
  17. var keys []string
  18. for k := range params {
  19. keys = append(keys, k)
  20. }
  21. sort.Strings(keys)
  22. var values []interface{}
  23. for _, k := range keys {
  24. values = append(values, params[k])
  25. }
  26. var buffer bytes.Buffer
  27. for i := 0; i < len(keys); i++ {
  28. buffer.WriteString(keys[i])
  29. buffer.WriteString("=")
  30. buffer.WriteString(fmt.Sprintf("%v", values[i]))
  31. buffer.WriteString("&")
  32. }
  33. buffer.WriteString("key=")
  34. buffer.WriteString(secretKey)
  35. preEncryptString := buffer.String()
  36. log.Println("排序后准备生成签名的字符串为:", preEncryptString)
  37. md5Digest := md5.Sum([]byte(preEncryptString))
  38. sign := hex.EncodeToString(md5Digest[:])
  39. log.Println("preEncryptString:", preEncryptString, "==> sign:", sign)
  40. return sign
  41. }