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.
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/setup.py +1 -1
- xtn-tools-pro-1.0.1.3.1/xtn_tools_pro/utils/crypto_pro.py +161 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/log.py +1 -1
- {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
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/LICENSE +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/MANIFEST.in +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/README.md +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/setup.cfg +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/__init__.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/MongoDB.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/MysqlDB.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/RedisDB.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/db/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/__init__.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/proxy/proxy.py +0 -0
- {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
- {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
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/tools.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/__init__.py +0 -0
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/crypto.py +0 -0
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/helpers.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/retry.py +0 -0
- {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
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/shell.py +0 -0
- {xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/utils/sql.py +0 -0
- {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
- {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
- {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
- {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
- {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
@@ -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:
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/.gitignore
RENAMED
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/Dockerfile
RENAMED
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/README.md
RENAMED
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{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
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{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
RENAMED
File without changes
|
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro/flask_demo/templates/uwsgi.ini
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{xtn-tools-pro-1.0.1.2.9 → xtn-tools-pro-1.0.1.3.1}/xtn_tools_pro.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|