xtn-tools-pro 1.0.1.2.9__tar.gz → 1.0.1.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {xtn-tools-pro-1.0.1.2.9/xtn_tools_pro.egg-info → xtn-tools-pro-1.0.1.3.1}/PKG-INFO +1 -1
  2. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/setup.py +1 -1
  3. xtn-tools-pro-1.0.1.3.1/xtn_tools_pro/utils/crypto_pro.py +161 -0
  4. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/log.py +1 -1
  5. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1/xtn_tools_pro.egg-info}/PKG-INFO +1 -1
  6. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/SOURCES.txt +1 -0
  7. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/LICENSE +0 -0
  8. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/MANIFEST.in +0 -0
  9. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/README.md +0 -0
  10. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/setup.cfg +0 -0
  11. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/__init__.py +0 -0
  12. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/MongoDB.py +0 -0
  13. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/MysqlDB.py +0 -0
  14. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/RedisDB.py +0 -0
  15. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/__init__.py +0 -0
  16. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/__init__.py +0 -0
  17. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/cli.py +0 -0
  18. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/.gitignore +0 -0
  19. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/Dockerfile +0 -0
  20. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/README.md +0 -0
  21. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/__init__.py +0 -0
  22. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/__init__.py +0 -0
  23. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/api/__init__.py +0 -0
  24. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/api/v1/__init__.py +0 -0
  25. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/api/v1/demo.py +0 -0
  26. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/app.py +0 -0
  27. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/config/__init__.py +0 -0
  28. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/config/secure.py +0 -0
  29. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/config/setting.py +0 -0
  30. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/__init__.py +0 -0
  31. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/base.py +0 -0
  32. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/error.py +0 -0
  33. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/error_code.py +0 -0
  34. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/redprint.py +0 -0
  35. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/libs/token_auth.py +0 -0
  36. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/models/__init__.py +0 -0
  37. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/models/base.py +0 -0
  38. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/models/redis_demo.py +0 -0
  39. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/validators/__init__.py +0 -0
  40. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/validators/base.py +0 -0
  41. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/app/validators/demo.py +0 -0
  42. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/docker-compose.yml +0 -0
  43. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/logs/__init__.py +0 -0
  44. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/obj/__init__.py +0 -0
  45. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/requirements.txt +0 -0
  46. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/server_run.py +0 -0
  47. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/test/__init__.py +0 -0
  48. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/uwsgi.ini +0 -0
  49. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
  50. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/__init__.py +0 -0
  51. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/proxy.py +0 -0
  52. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/task_pro/__init__.py +0 -0
  53. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/task_pro/go_fun_air_v1.py +0 -0
  54. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/task_pro/go_fun_v3.py +0 -0
  55. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/tools.py +0 -0
  56. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/__init__.py +0 -0
  57. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/audio_video.py +0 -0
  58. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/crypto.py +0 -0
  59. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/file_utils.py +0 -0
  60. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/helpers.py +0 -0
  61. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/retry.py +0 -0
  62. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/set_data.py +0 -0
  63. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/shell.py +0 -0
  64. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/sql.py +0 -0
  65. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/time_utils.py +0 -0
  66. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/dependency_links.txt +0 -0
  67. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/entry_points.txt +0 -0
  68. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/requires.txt +0 -0
  69. {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.2.9
3
+ Version: 1.0.1.3.1
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -15,7 +15,7 @@ with open("README.md", "r") as f:
15
15
 
16
16
  setuptools.setup(
17
17
  name="xtn-tools-pro", # 模块名称
18
- version="1.0.1.2.9", # 版本
18
+ version="1.0.1.3.1", # 版本
19
19
  author="xtn", # 作者
20
20
  author_email="czw011122@gmail.com", # 作者邮箱
21
21
  description="xtn 开发工具", # 模块简介
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # 说明:
5
+ # 加解密、编解码
6
+ # History:
7
+ # Date Author Version Modification
8
+ # --------------------------------------------------------------------------------------------------
9
+ # 2024/5/13 xiatn V00.01.000 新建
10
+ # --------------------------------------------------------------------------------------------------
11
+ import jwt
12
+ import time
13
+ import json
14
+ import pyotp
15
+ import base64
16
+ import hashlib
17
+ import secrets
18
+ from Crypto.PublicKey import RSA
19
+ from Crypto.Cipher import AES, PKCS1_OAEP
20
+ from Crypto.Util.Padding import pad, unpad
21
+ from Crypto.Random import get_random_bytes
22
+
23
+
24
+ class XtnDeEnAir:
25
+ BLOCK_SIZE = AES.block_size
26
+
27
+ @staticmethod
28
+ def de_data(key: bytes, raw: dict) -> str:
29
+ """
30
+ 加密
31
+ """
32
+ cipher = AES.new(key, AES.MODE_ECB)
33
+ raw["time"] = int(time.time())
34
+ raw_s = json.dumps(raw)
35
+ padded_data = pad(raw_s.encode('utf-8'), XtnDeEnAir.BLOCK_SIZE)
36
+ enc = cipher.encrypt(padded_data)
37
+ result = base64.b64encode(enc).decode('utf-8')
38
+ return result
39
+
40
+ @staticmethod
41
+ def en_data(key: bytes, raw: str) -> str:
42
+ """
43
+ 解密
44
+ """
45
+ cipher = AES.new(key, AES.MODE_ECB)
46
+ enc = base64.b64decode(raw)
47
+ decrypted = cipher.decrypt(enc)
48
+ result = unpad(decrypted, XtnDeEnAir.BLOCK_SIZE).decode('utf-8')
49
+ return result
50
+
51
+
52
+ class XtnDeEnPro:
53
+ BLOCK_SIZE = AES.block_size
54
+
55
+ @staticmethod
56
+ def encrypt_dict(key: bytes, raw: dict) -> str:
57
+ """
58
+ 加密
59
+ """
60
+ raw["encrypt_time"] = int(time.time())
61
+ raw_json = json.dumps(data).encode('utf-8')
62
+ padded_data = pad(raw_json, XtnDeEnPro.BLOCK_SIZE)
63
+ iv = get_random_bytes(XtnDeEnPro.BLOCK_SIZE)
64
+ cipher = AES.new(key, AES.MODE_CBC, iv)
65
+ encrypted = cipher.encrypt(padded_data)
66
+ combined = iv + encrypted
67
+ result = base64.b64encode(combined).decode('utf-8')
68
+ # result = combined.hex() # hex
69
+ return result
70
+
71
+ @staticmethod
72
+ def decrypt_dict(key: bytes, raw: str) -> dict:
73
+ """
74
+ 解密
75
+ """
76
+ try:
77
+ combined = base64.b64decode(raw)
78
+ # combined = bytes.fromhex("") # hex
79
+ iv = combined[:XtnDeEnPro.BLOCK_SIZE]
80
+ encrypted = combined[XtnDeEnPro.BLOCK_SIZE:]
81
+ cipher = AES.new(key, AES.MODE_CBC, iv)
82
+ decrypted = unpad(cipher.decrypt(encrypted), XtnDeEnPro.BLOCK_SIZE)
83
+ result = decrypted.decode('utf-8')
84
+ return json.loads(result)
85
+ except (ValueError, KeyError, json.JSONDecodeError) as e:
86
+ raise ValueError(f"解密失败: {e}")
87
+
88
+
89
+ class XtnDeEnProMax:
90
+ BLOCK_SIZE = AES.block_size
91
+
92
+ @staticmethod
93
+ def encrypt_dict(key: bytes, raw: dict) -> str:
94
+ """
95
+ 加密
96
+ """
97
+ session_key = get_random_bytes(16)
98
+
99
+ rsa_key = RSA.import_key(key)
100
+ rsa_cipher = PKCS1_OAEP.new(rsa_key)
101
+ encrypted_session_key = rsa_cipher.encrypt(session_key)
102
+
103
+ iv = get_random_bytes(16)
104
+ aes_cipher = AES.new(session_key, AES.MODE_CBC, iv)
105
+ raw["encrypt_time"] = int(time.time())
106
+ raw_data = json.dumps(raw).encode('utf-8')
107
+ encrypted_data = aes_cipher.encrypt(pad(raw_data, XtnDeEnProMax.BLOCK_SIZE))
108
+
109
+ combined = (
110
+ len(encrypted_session_key).to_bytes(2, 'big') +
111
+ encrypted_session_key +
112
+ iv +
113
+ encrypted_data
114
+ )
115
+
116
+ result_base64 = base64.b64encode(combined).decode()
117
+ # result_hex = combined.hex() # hex
118
+ return result_base64
119
+
120
+ @staticmethod
121
+ def decrypt_dict(key: bytes, raw: str) -> dict:
122
+ """
123
+ 解密
124
+ """
125
+ try:
126
+ combined = base64.b64decode(raw)
127
+ key_len = int.from_bytes(combined[:2], 'big')
128
+ encrypted_session_key = combined[2:2 + key_len]
129
+ iv = combined[2 + key_len:2 + key_len + 16]
130
+ encrypted_data = combined[2 + key_len + 16:]
131
+
132
+ rsa_key = RSA.import_key(key)
133
+ rsa_cipher = PKCS1_OAEP.new(rsa_key)
134
+ session_key = rsa_cipher.decrypt(encrypted_session_key)
135
+
136
+ aes_cipher = AES.new(session_key, AES.MODE_CBC, iv)
137
+ decrypted = unpad(aes_cipher.decrypt(encrypted_data), XtnDeEnProMax.BLOCK_SIZE)
138
+ result = decrypted.decode('utf-8')
139
+ return json.loads(result)
140
+ except (ValueError, KeyError, json.JSONDecodeError) as e:
141
+ raise ValueError(f"解密失败: {e}")
142
+
143
+
144
+ if __name__ == '__main__':
145
+ key = b"d9fe4b29dc7decc8360e72e7dd15a5c8"
146
+ data = {
147
+ "task_type": "update_name",
148
+ "task_client": "tiktok",
149
+ }
150
+ sss = XtnDeEnAir.de_data(key, data)
151
+ print(sss)
152
+ print(XtnDeEnAir.en_data(key, sss))
153
+
154
+ key_pair = RSA.generate(2048)
155
+ private_key = key_pair.export_key()
156
+ public_key = key_pair.publickey().export_key()
157
+ print(private_key)
158
+ print(public_key)
159
+ sss = XtnDeEnProMax.encrypt_dict(public_key, data)
160
+ print(sss)
161
+ print(XtnDeEnProMax.decrypt_dict(private_key, sss))
@@ -118,7 +118,7 @@ class Log:
118
118
  # 记录当前的日期,用于之后检查日期是否已经改变
119
119
  self.current_date = get_time_timestamp_to_datestr(format="%Y_%m_%d")
120
120
  # 记录日志文件的路径模板,用于之后创建新的日志文件
121
- self.path_template = f"logs/{{date}}/{name}.log"
121
+ self.path_template = f"{path}/logs/{{date}}/{name}.log"
122
122
  path = self.path_template.format(date=self.current_date)
123
123
  # print(path)
124
124
  if is_write_to_file:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.2.9
3
+ Version: 1.0.1.3.1
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -56,6 +56,7 @@ xtn_tools_pro/task_pro/go_fun_v3.py
56
56
  xtn_tools_pro/utils/__init__.py
57
57
  xtn_tools_pro/utils/audio_video.py
58
58
  xtn_tools_pro/utils/crypto.py
59
+ xtn_tools_pro/utils/crypto_pro.py
59
60
  xtn_tools_pro/utils/file_utils.py
60
61
  xtn_tools_pro/utils/helpers.py
61
62
  xtn_tools_pro/utils/log.py