common.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package utils
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha256"
  5. "encoding/base64"
  6. "fmt"
  7. "sort"
  8. "strconv"
  9. "strings"
  10. )
  11. // HmacSha256 计算HmacSha256
  12. // key 是加密所使用的key
  13. // data 是加密的内容
  14. func HmacSha256(key string, data string) []byte {
  15. mac := hmac.New(sha256.New, []byte(key))
  16. _, _ = mac.Write([]byte(data))
  17. return mac.Sum(nil)
  18. }
  19. // 数据没有记录
  20. func ErrNoRow() string {
  21. return "<QuerySeter> no row found"
  22. }
  23. // HmacSha256ToBase64 将加密后的二进制转Base64字符串
  24. func HmacSha256ToBase64(key string, data string) string {
  25. return base64.URLEncoding.EncodeToString(HmacSha256(key, data))
  26. }
  27. func GetSign(nonce, timestamp, appId, secret string) (sign string) {
  28. signStrMap := map[string]string{
  29. "nonce": nonce,
  30. "timestamp": timestamp,
  31. "appid": appId,
  32. }
  33. keys := make([]string, 0, len(signStrMap))
  34. for k := range signStrMap {
  35. keys = append(keys, k)
  36. }
  37. sort.Strings(keys)
  38. var signStr string
  39. for _, k := range keys {
  40. signStr += k + "=" + signStrMap[k] + "&"
  41. }
  42. signStr = strings.Trim(signStr, "&")
  43. fmt.Println("signStr:" + signStr)
  44. sign = HmacSha256ToBase64(secret, signStr)
  45. return
  46. }
  47. func StringsToJSON(str string) string {
  48. rs := []rune(str)
  49. jsons := ""
  50. for _, r := range rs {
  51. rint := int(r)
  52. if rint < 128 {
  53. jsons += string(r)
  54. } else {
  55. jsons += "\\u" + strconv.FormatInt(int64(rint), 16) // json
  56. }
  57. }
  58. return jsons
  59. }
  60. func StartIndex(page, pagesize int) int {
  61. if page > 1 {
  62. return (page - 1) * pagesize
  63. }
  64. return 0
  65. }