ETkObject.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import base64
  2. import urllib.parse
  3. from random import Random
  4. class ETkObject(object):
  5. def __init__(self, etk):
  6. self.uid = ''
  7. self.decrypt_uid(etk)
  8. def decrypt_uid(self, etk):
  9. try:
  10. c = base64.b64decode(etk)
  11. c = c[2:-2]
  12. c = urllib.parse.unquote(c.decode('utf-8'))
  13. c = base64.b64decode(c)
  14. uid = c.decode('utf-8')
  15. assert len(uid) == 20 or len(uid) == 14
  16. self.uid = uid
  17. except Exception as e:
  18. print(repr(e))
  19. def encrypt_uid(self, data):
  20. s = data.encode()
  21. s = base64.b64encode(s)
  22. startStr = self.generate_random()
  23. endStr = self.generate_random()
  24. s = '{startStr}{s}{endStr}'.format(startStr=startStr, s=s.decode('utf-8'), endStr=endStr)
  25. s = base64.b64encode(s.encode())
  26. s = s.decode('utf-8')
  27. return s
  28. @staticmethod
  29. def generate_random():
  30. characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
  31. length = len(characterSet) - 1
  32. random = Random()
  33. ss = ''
  34. for index in range(2):
  35. ss += characterSet[random.randint(0, length)]
  36. return ss