encryptarticle.go 1.6 KB

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