xtn-tools-pro 1.0.1.3.0__tar.gz → 1.0.1.3.2__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.3.0/xtn_tools_pro.egg-info → xtn-tools-pro-1.0.1.3.2}/PKG-INFO +1 -1
  2. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/setup.py +1 -1
  3. xtn-tools-pro-1.0.1.3.2/xtn_tools_pro/utils/crypto_pro.py +167 -0
  4. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2/xtn_tools_pro.egg-info}/PKG-INFO +1 -1
  5. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro.egg-info/SOURCES.txt +1 -0
  6. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/LICENSE +0 -0
  7. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/MANIFEST.in +0 -0
  8. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/README.md +0 -0
  9. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/setup.cfg +0 -0
  10. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/__init__.py +0 -0
  11. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/db/MongoDB.py +0 -0
  12. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/db/MysqlDB.py +0 -0
  13. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/db/RedisDB.py +0 -0
  14. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/db/__init__.py +0 -0
  15. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/__init__.py +0 -0
  16. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/cli.py +0 -0
  17. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/.gitignore +0 -0
  18. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/Dockerfile +0 -0
  19. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/README.md +0 -0
  20. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/__init__.py +0 -0
  21. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/__init__.py +0 -0
  22. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/api/__init__.py +0 -0
  23. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/api/v1/__init__.py +0 -0
  24. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/api/v1/demo.py +0 -0
  25. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/app.py +0 -0
  26. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/config/__init__.py +0 -0
  27. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/config/secure.py +0 -0
  28. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/config/setting.py +0 -0
  29. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/__init__.py +0 -0
  30. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/base.py +0 -0
  31. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/error.py +0 -0
  32. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/error_code.py +0 -0
  33. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/redprint.py +0 -0
  34. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/libs/token_auth.py +0 -0
  35. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/models/__init__.py +0 -0
  36. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/models/base.py +0 -0
  37. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/models/redis_demo.py +0 -0
  38. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/validators/__init__.py +0 -0
  39. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/validators/base.py +0 -0
  40. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/app/validators/demo.py +0 -0
  41. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/docker-compose.yml +0 -0
  42. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/logs/__init__.py +0 -0
  43. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/obj/__init__.py +0 -0
  44. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/requirements.txt +0 -0
  45. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/server_run.py +0 -0
  46. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/test/__init__.py +0 -0
  47. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/flask_demo/templates/uwsgi.ini +0 -0
  48. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
  49. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/proxy/__init__.py +0 -0
  50. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/proxy/proxy.py +0 -0
  51. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/task_pro/__init__.py +0 -0
  52. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/task_pro/go_fun_air_v1.py +0 -0
  53. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/task_pro/go_fun_v3.py +0 -0
  54. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/tools.py +0 -0
  55. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/__init__.py +0 -0
  56. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/audio_video.py +0 -0
  57. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/crypto.py +0 -0
  58. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/file_utils.py +0 -0
  59. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/helpers.py +0 -0
  60. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/log.py +0 -0
  61. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/retry.py +0 -0
  62. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/set_data.py +0 -0
  63. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/shell.py +0 -0
  64. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/sql.py +0 -0
  65. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro/utils/time_utils.py +0 -0
  66. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro.egg-info/dependency_links.txt +0 -0
  67. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro.egg-info/entry_points.txt +0 -0
  68. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/xtn_tools_pro.egg-info/requires.txt +0 -0
  69. {xtn-tools-pro-1.0.1.3.0 → xtn-tools-pro-1.0.1.3.2}/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.3.0
3
+ Version: 1.0.1.3.2
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.3.0", # 版本
18
+ version="1.0.1.3.2", # 版本
19
19
  author="xtn", # 作者
20
20
  author_email="czw011122@gmail.com", # 作者邮箱
21
21
  description="xtn 开发工具", # 模块简介
@@ -0,0 +1,167 @@
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 encrypt_dict(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 decrypt_dict(key: bytes, raw: str) -> dict:
42
+ """
43
+ 解密
44
+ """
45
+ try:
46
+ cipher = AES.new(key, AES.MODE_ECB)
47
+ enc = base64.b64decode(raw)
48
+ decrypted = cipher.decrypt(enc)
49
+ result = unpad(decrypted, XtnDeEnAir.BLOCK_SIZE).decode('utf-8')
50
+ return json.loads(result)
51
+ except (ValueError, KeyError, json.JSONDecodeError) as e:
52
+ # raise ValueError(f"解密失败: {e}")
53
+ return {}
54
+
55
+
56
+ class XtnDeEnPro:
57
+ BLOCK_SIZE = AES.block_size
58
+
59
+ @staticmethod
60
+ def encrypt_dict(key: bytes, raw: dict) -> str:
61
+ """
62
+ 加密
63
+ """
64
+ raw["encrypt_time"] = int(time.time())
65
+ raw_json = json.dumps(data).encode('utf-8')
66
+ padded_data = pad(raw_json, XtnDeEnPro.BLOCK_SIZE)
67
+ iv = get_random_bytes(XtnDeEnPro.BLOCK_SIZE)
68
+ cipher = AES.new(key, AES.MODE_CBC, iv)
69
+ encrypted = cipher.encrypt(padded_data)
70
+ combined = iv + encrypted
71
+ result = base64.b64encode(combined).decode('utf-8')
72
+ # result = combined.hex() # hex
73
+ return result
74
+
75
+ @staticmethod
76
+ def decrypt_dict(key: bytes, raw: str) -> dict:
77
+ """
78
+ 解密
79
+ """
80
+ try:
81
+ combined = base64.b64decode(raw)
82
+ # combined = bytes.fromhex("") # hex
83
+ iv = combined[:XtnDeEnPro.BLOCK_SIZE]
84
+ encrypted = combined[XtnDeEnPro.BLOCK_SIZE:]
85
+ cipher = AES.new(key, AES.MODE_CBC, iv)
86
+ decrypted = unpad(cipher.decrypt(encrypted), XtnDeEnPro.BLOCK_SIZE)
87
+ result = decrypted.decode('utf-8')
88
+ return json.loads(result)
89
+ except (ValueError, KeyError, json.JSONDecodeError) as e:
90
+ # raise ValueError(f"解密失败: {e}")
91
+ return {}
92
+
93
+
94
+ class XtnDeEnProMax:
95
+ BLOCK_SIZE = AES.block_size
96
+
97
+ @staticmethod
98
+ def encrypt_dict(key: bytes, raw: dict) -> str:
99
+ """
100
+ 加密
101
+ """
102
+ session_key = get_random_bytes(16)
103
+
104
+ rsa_key = RSA.import_key(key)
105
+ rsa_cipher = PKCS1_OAEP.new(rsa_key)
106
+ encrypted_session_key = rsa_cipher.encrypt(session_key)
107
+
108
+ iv = get_random_bytes(16)
109
+ aes_cipher = AES.new(session_key, AES.MODE_CBC, iv)
110
+ raw["encrypt_time"] = int(time.time())
111
+ raw_data = json.dumps(raw).encode('utf-8')
112
+ encrypted_data = aes_cipher.encrypt(pad(raw_data, XtnDeEnProMax.BLOCK_SIZE))
113
+
114
+ combined = (
115
+ len(encrypted_session_key).to_bytes(2, 'big') +
116
+ encrypted_session_key +
117
+ iv +
118
+ encrypted_data
119
+ )
120
+
121
+ result_base64 = base64.b64encode(combined).decode()
122
+ # result_hex = combined.hex() # hex
123
+ return result_base64
124
+
125
+ @staticmethod
126
+ def decrypt_dict(key: bytes, raw: str) -> dict:
127
+ """
128
+ 解密
129
+ """
130
+ try:
131
+ combined = base64.b64decode(raw)
132
+ key_len = int.from_bytes(combined[:2], 'big')
133
+ encrypted_session_key = combined[2:2 + key_len]
134
+ iv = combined[2 + key_len:2 + key_len + 16]
135
+ encrypted_data = combined[2 + key_len + 16:]
136
+
137
+ rsa_key = RSA.import_key(key)
138
+ rsa_cipher = PKCS1_OAEP.new(rsa_key)
139
+ session_key = rsa_cipher.decrypt(encrypted_session_key)
140
+
141
+ aes_cipher = AES.new(session_key, AES.MODE_CBC, iv)
142
+ decrypted = unpad(aes_cipher.decrypt(encrypted_data), XtnDeEnProMax.BLOCK_SIZE)
143
+ result = decrypted.decode('utf-8')
144
+ return json.loads(result)
145
+ except (ValueError, KeyError, json.JSONDecodeError) as e:
146
+ # raise ValueError(f"解密失败: {e}")
147
+ return {}
148
+
149
+
150
+ if __name__ == '__main__':
151
+ key = b"d9fe4b29dc7decc8360e72e7dd15a5c8"
152
+ data = {
153
+ "task_type": "update_name",
154
+ "task_client": "tiktok",
155
+ }
156
+ sss = XtnDeEnAir.encrypt_dict(key, data)
157
+ print(sss)
158
+ print(XtnDeEnAir.decrypt_dict(key, sss))
159
+
160
+ # key_pair = RSA.generate(2048)
161
+ # private_key = key_pair.export_key()
162
+ # public_key = key_pair.publickey().export_key()
163
+ # print(private_key)
164
+ # print(public_key)
165
+ # sss = XtnDeEnProMax.encrypt_dict(public_key, data)
166
+ # print(sss)
167
+ # print(XtnDeEnProMax.decrypt_dict(private_key, sss))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.3.0
3
+ Version: 1.0.1.3.2
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