signweb.go 847 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * @author chengliang
  3. * @date 2026/1/23 18:38
  4. * @brief
  5. *
  6. **/
  7. package tool
  8. import (
  9. "crypto/md5"
  10. "encoding/hex"
  11. "fmt"
  12. "hash"
  13. "sort"
  14. "strings"
  15. "sync"
  16. )
  17. const KEY_SECRET = "secret"
  18. var md5Pool = sync.Pool{
  19. New: func() interface{} {
  20. return md5.New()
  21. },
  22. }
  23. func GenSign(params map[string]any) string {
  24. var keys []string
  25. for k := range params {
  26. keys = append(keys, k)
  27. }
  28. sort.Strings(keys)
  29. fmt.Println("keys:", keys)
  30. var paramParts []string
  31. for _, k := range keys {
  32. paramParts = append(paramParts, fmt.Sprintf("%s=%s", k, params[k]))
  33. }
  34. paramStr := strings.Join(paramParts, "&")
  35. paramStr = fmt.Sprintf("%s&%s", paramStr, KEY_SECRET)
  36. md5Obj := md5Pool.Get().(hash.Hash)
  37. defer md5Pool.Put(md5Obj)
  38. md5Obj.Reset()
  39. md5Obj.Write([]byte(paramStr))
  40. md5ObjSum := md5Obj.Sum(nil)
  41. return hex.EncodeToString(md5ObjSum)
  42. }