test_token.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """生成测试token
  2. """
  3. import base64 # 导入base64模块,用于编码和解码数据
  4. import json # 导入json模块,用于处理JSON格式数据
  5. from Crypto.Cipher import AES # 导入AES加密模块
  6. from datetime import datetime # 导入datetime模块,用于获取当前时间
  7. # 定义加密密钥
  8. key = "2na$$PdV9AW8b#CS"
  9. # 定义一个常量字符串,用于替换加密后的Base64字符串中的特殊字符“+”
  10. ADD = "/add/"
  11. def encrypt(str, key):
  12. """
  13. 使用AES算法对输入字符串进行加密,并返回加密后的Base64编码字符串。
  14. 参数:
  15. str (str): 要加密的字符串
  16. key (str): 加密密钥
  17. 返回:
  18. str: 加密后的Base64编码字符串
  19. """
  20. # 创建AES加密器,使用ECB模式(电子密码本模式)
  21. cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
  22. # 对输入字符串进行填充,使其长度符合AES块大小的要求
  23. padded_data = pad(str.encode('utf-8'), AES.block_size)
  24. # 使用AES加密器对填充后的数据进行加密
  25. encrypted = cipher.encrypt(padded_data)
  26. # 将加密后的二进制数据转换为Base64编码字符串
  27. encrypted_base64 = base64.b64encode(encrypted).decode('utf-8')
  28. # 去除Base64编码字符串中的换行符(如果有)
  29. encrypted_base64 = encrypted_base64.replace('\n', '')
  30. # 替换Base64编码字符串中的“+”符号为自定义字符串“add”,避免特殊字符冲突
  31. encrypted_base64 = encrypted_base64.replace('+', ADD)
  32. return encrypted_base64
  33. def pad(data, block_size):
  34. """
  35. 对输入数据进行填充,使其长度成为块大小的整数倍(PKCS7填充方式)。
  36. 参数:
  37. data (bytes): 要填充的字节数据
  38. block_size (int): 块大小(AES块大小为16字节)
  39. 返回:
  40. bytes: 填充后的字节数据
  41. """
  42. # 计算需要填充的字节数
  43. padding = block_size - len(data) % block_size
  44. # 按照PKCS7填充方式,在数据末尾添加padding个值为padding的字节
  45. return data + bytes([padding]) * padding
  46. # 构造一个包含必要信息的字典
  47. s = {
  48. "APP_ID": "FINANCE", # 应用ID
  49. "TIME_STAMP": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), # 当前时间戳
  50. "REQUEST_URL": "", # 请求URL(此处为空字符串)
  51. "LOGIN_ID": "test", # 登录ID
  52. "EXPIRE_TIME": 3600, # 过期时间(单位:秒)
  53. }
  54. # 将字典转换为JSON格式字符串,并调用encrypt函数对其进行加密最后打印加密结果
  55. print(encrypt(json.dumps(s), key))