encryptarticle.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package util
  2. import (
  3. "net/url"
  4. "strings"
  5. )
  6. //正文
  7. var SE = &SimpleEncrypt{Key: "topnet2015topnet2015"}
  8. var SE2 = &SimpleEncrypt{Key: "2017jianyu"}
  9. //百度
  10. var BSE = &SimpleEncrypt{Key: "HNtopnet2017jy"}
  11. var BSE2 = &SimpleEncrypt{Key: "TOP2017jianyu"}
  12. //订阅推送邮件
  13. var ESE = &SimpleEncrypt{Key: "PEjy2018topnet"}
  14. var ESE2 = &SimpleEncrypt{Key: "TopnetJy2018Pe"}
  15. //通用加密
  16. func CommonEncodeArticle(stype string, keys ...string) (id string) {
  17. switch stype {
  18. case "content":
  19. id = BEncodeArticleId2ByCheck("A", SE, SE2, keys...)
  20. case "bdprivate":
  21. id = BEncodeArticleId2ByCheck("B", BSE, BSE2, keys...)
  22. case "mailprivate":
  23. id = BEncodeArticleId2ByCheck("C", ESE, ESE2, keys...)
  24. }
  25. return
  26. }
  27. //通用解密
  28. func CommonDecodeArticle(stype string, id string) (res []string) {
  29. switch stype {
  30. case "content":
  31. res = BDecodeArticleId2ByCheck(id, SE, SE2)
  32. case "bdprivate":
  33. res = BDecodeArticleId2ByCheck(id, BSE, BSE2)
  34. case "mailprivate":
  35. res = BDecodeArticleId2ByCheck(id, ESE, ESE2)
  36. }
  37. return
  38. }
  39. //短地址加密,二次加密带校验和
  40. func BEncodeArticleId2ByCheck(h string, s1, s2 *SimpleEncrypt, keys ...string) string {
  41. kstr := strings.Join(keys, ",")
  42. kstr = s1.EncodeStringByCheck(kstr)
  43. return url.QueryEscape(h + GetLetterRandom(2) + s2.EncodeStringByCheck(kstr))
  44. }
  45. //短地址解密,二次解密带校验和
  46. func BDecodeArticleId2ByCheck(id string, s1, s2 *SimpleEncrypt) []string {
  47. if !strings.Contains(id, "+") { //新加密算法解密
  48. id, _ = url.QueryUnescape(id)
  49. }
  50. kstr := s2.DecodeStringByCheck(id[3:])
  51. return strings.Split(s1.DecodeStringByCheck(kstr), ",")
  52. }