aes_util.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from Crypto.Cipher import AES
  2. from binascii import b2a_hex, a2b_hex
  3. import base64
  4. from datetime import datetime
  5. import hashlib
  6. # https://www.cnblogs.com/qiufenzhiyue/articles/12191416.html
  7. def token() -> str:
  8. d1 = datetime.today()
  9. tokenStr = 'yss_bdc' + str(d1.month) + str(d1.day) + str(d1.weekday()+1) + str(d1.year)
  10. m = hashlib.md5()
  11. m.update(tokenStr.encode('ascii'))
  12. token_md5 = m.hexdigest()
  13. return token_md5[0:16]
  14. class AES_ECB:
  15. def __init__(self,key):
  16. self.key = key.encode('utf8')
  17. self.mode = AES.MODE_ECB
  18. # 生成加密器,参数密匙和模式,ECB需要偏移量
  19. self.cryptor = AES.new(self.key, self.mode)
  20. @staticmethod
  21. def add_to_16(text):
  22. pad = 16 - len(text.encode('utf-8')) % 16
  23. text = text + pad * chr(pad)
  24. return text.encode('utf-8')
  25. def encrypt(self,text):
  26. #预处理,填充明文为16的倍数
  27. text = self.add_to_16(text)
  28. #加密,输出bytes类型
  29. cipher_text = self.cryptor.encrypt(text)
  30. return b2a_hex(cipher_text).decode('utf-8')
  31. def decrypt(self,text):
  32. text_a = a2b_hex(text)
  33. hex_text = self.cryptor.decrypt(text_a).decode('utf8')
  34. #剔除尾部
  35. return hex_text[0:-ord(hex_text[-1])]
  36. def encrypt(self, text):
  37. #预处理,填充明文为16的倍数
  38. text = self.add_to_16(text)
  39. #加密,输出bytes类型
  40. cipher_text = self.cryptor.encrypt(text)
  41. return b2a_hex(cipher_text).decode('utf-8')
  42. def decrypt_old(self,arr):
  43. text_a = a2b_hex(arr[1])
  44. text_b = base64.b64decode(arr[0]) # base64解码
  45. hex_text = self.cryptor.decrypt(text_a).decode('utf8')
  46. #剔除尾部
  47. hex_text = hex_text[0:-ord(hex_text[-1])]
  48. base64_text = self.cryptor.decrypt(text_b).decode('utf8')
  49. base64_text = base64_text[0:-ord(base64_text[-1])]
  50. print('解密16进制密文:',arr[1],'->',hex_text)
  51. print('解密base64密文:', arr[0],'->',base64_text)
  52. if __name__ == '__main__':
  53. import os
  54. key = token()
  55. t = 'aaaaa'
  56. ase = AES_ECB(key)
  57. print(ase.encrypt(t))
  58. ase.decrypt(ase.encrypt(t))